mbed(SerialHalfDuplex入り)
Fork of mbed by
Diff: LPC2300_HAL.h
- Revision:
- 0:82220227f4fa
- Child:
- 1:6b7f447ca868
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LPC2300_HAL.h Tue Apr 08 14:12:21 2008 +0000 @@ -0,0 +1,412 @@ +/* mbed Microcontroller Library - LPC2300 HAL + * Copyright (c) 2007-2008, sford + * + * This should be anything specific to abstraction the LPC2300 + * + * The HAL has no state associated with it. It is just a nice way to poke registers + * It is still specific to the chip, but a neat interface and a bit more general + * it is subject ot change and not exposed to the general user + */ + +#ifndef MBED_LPC2300_HAL_H +#define MBED_LPC2300_HAL_H + +#include "LPC23xx.h" + +namespace LPC2300 { + +/* Section: LPC2300 */ + +//=================================================================== +// General +//=================================================================== + +typedef volatile unsigned int reg32; + +#define NOT_CONNECTED (-1) + +//=================================================================== +// Pin Connect Block +//=================================================================== + +/* Function: pin_function + * Set the port function (0-3) + */ +void pin_function(int port, int function); + +/* Function: pin_pullup + * Set the port resistor to pullup + */ +void pin_pullup(int port); + +/* Function: pin_pulldown + * Set the port resistor to pulldown + */ +void pin_pulldown(int port); + +/* Function: pin_pullnone + * Set the port resistor to none + */ +void pin_pullnone(int port); + +//=================================================================== +// GPIO +//=================================================================== + +struct GPIORF { + volatile unsigned int dir; // 0x00 + volatile unsigned int _nc; // 0x04 + volatile unsigned int _nc2; // 0x08 + volatile unsigned int _nc3; // 0x0C + volatile unsigned int mask; // 0x10 + volatile unsigned int pin; // 0x14 + volatile unsigned int set; // 0x18 + volatile unsigned int clr; // 0x1C +}; + +/* Function: gpio_input + * Set the port GPIO as an input + */ +void gpio_input(int port); + +/* Function: gpio_output + * Set the port GPIO as an output + */ +void gpio_output(int port); + +/* Function: gpio_write + * Write a value to the GPIO port (v & 1) + */ +void gpio_write(int port, int v); + +/* Function: gpio_read + * Read a value from the GPIO port (0 or 1) + */ +int gpio_read(int port); + +//=================================================================== +// GPIO IRQs +//=================================================================== + +struct GPIOInterruptsRF { + reg32 StatR; // 0x00 + reg32 StatF; // 0x04 + reg32 Clr; // 0x08 + reg32 EnR; // 0x0C + reg32 EnF; // 0x10 +}; + +/* Function: gpio_irq_enable_rising + * Enable the rising edge interrupt + */ +void gpio_irq_enable_rising(int port); + +/* Function: gpio_irq_enable_falling + * Enable the falling edge interrupt + */ +void gpio_irq_enable_falling(int port); + +/* Function: gpio_irq_disable_rising + * Disable the rising edge interrupt + */ +void gpio_irq_disable_rising(int port); + +/* Function: gpio_irq_disable_falling + * Disable the falling edge interrupt + */ +void gpio_irq_disable_falling(int port); + +/* Function: gpio_irq_clear + * Clear rising and falling interrupt for the port + */ +void gpio_irq_clear(int port); + +int gpio_irq_pending(); +int gpio_irq_pending_rising(int port); +int gpio_irq_pending_falling(int port); + +//=================================================================== +// Analog-to-Digital Converter +//=================================================================== + +/* Function: adc_poweron + * Turn on the ADC + */ +void adc_poweron(); + +/* Function: adc_poweroff + * Turn off the ADC + */ +void adc_poweroff(); + +/* Function: adc_init + * Setup the ADC ready for reading + */ +void adc_init(); + +/* Function: adc_read + * Read the value of the ADC (10-bit, id 0-5) + */ +int adc_read(int id); + +//=================================================================== +// Digital-to-Analog Converter +//=================================================================== + +/* Function: dac_poweron + * Turn on the DAC + */ +void dac_poweron(); + +/* Function: dac_poweroff + * Turn off the DAC + */ +void dac_poweroff(); + +/* Function: dac_init + * Setup the DAC ready for writinbg + */ +void dac_init(); + +/* Function: dac_write + * Write a value to the DAC (10-bit) + */ +void dac_write(int value); + +/* Function: dac_read + * Read the value currently set as the DAC output (10-bit) + */ +int dac_read(); + +//=================================================================== +// PWM +//=================================================================== + +struct LPC2368_PWM_RF { + reg32 IR; // 0x00 - Interrupt Register + reg32 TCR; // 0x04 - Timer Control Register + reg32 TC; // 0x08 - Timer Counter + reg32 PR; // 0x0C - Prescale Register + reg32 PC; // 0x10 - Prescale Counter + reg32 MCR; // 0x14 - Match Control Register + reg32 MR0; // 0x18 - Match Register 0 + reg32 MR1; // 0x1C - Match Register 1 + reg32 MR2; // 0x20 - Match Register 2 + reg32 MR3; // 0x24 - Match Register 3 + reg32 CCR; // 0x28 - Capture Control Register + reg32 CR0; // 0x2C - Capture Register 1 + reg32 CR1; // 0x30 - Capture Register 2 + reg32 CR2; // 0x34 - Capture Register 3 + reg32 CR3; // 0x38 - Capture Register 4 + reg32 EMR; // 0x3C - External Match Register + reg32 MR4; // 0x40 - Match Register 4 + reg32 MR5; // 0x44 - Match Register 5 + reg32 MR6; // 0x48 - Match Register 6 + reg32 PCR; // 0x4C - PWM Control Register + reg32 LER; // 0x50 - Load Enable Register + reg32 _nc[7]; // 0x54-0x6C + reg32 CTCR; // 0x70 - Count Control Register +}; + +#define LPC2368_PWM ((LPC2368_PWM_RF*)0xE0018000) + +#define TCR_CNT_EN (1 << 0) +#define TCR_RESET (1 << 1) +#define TCR_PWM_EN (1 << 3) + +//=================================================================== +// SPI Master (SSP) +//=================================================================== + +struct SPIRF { + reg32 CR0; // 0x00 + reg32 CR1; // 0x04 + reg32 DR; // 0x08 + reg32 SR; // 0x0C + reg32 CPSR; // 0x10 + reg32 IMSC; // 0x14 + reg32 RIS; // 0x18 + reg32 MIS; // 0x1C + reg32 ICR; // 0x20 + reg32 DMACR; // 0x24 +}; + +void ssp_format(int id, int bits, int phase, int polarity); +void ssp_frequency(int id, int hz); +void ssp_enable(int id); +void ssp_disable(int id); + + +int ssp_read(int id); +void ssp_write(int id, int value); +int ssp_readable(int id); +int ssp_writeable(int id); + +void ssp_poweron(int id); +void ssp_poweroff(int id); + +/* +int ssp_busy(int id); +void ssp_clear(int id); +*/ + + +//=================================================================== +// Uart +//=================================================================== + +struct UartRF { + union { + reg32 RBR; // 0x00 - Receive Buffer Register [DLAB=0] + reg32 THR; // 0x00 - Transmit Holding Register [DLAB=0] + reg32 DLL; // 0x00 - Divisor Latch (LSB) [DLAB=1] + }; + union { + reg32 DLM; // 0x04 - Divisor Latch (MSB) [DLAB=1] + reg32 IER; // 0x04 - Interrupt Enable Register [DLAB=0] + }; + union { + reg32 IIR; // 0x08 - Interrupt ID Register + reg32 FCR; // 0x08 - Fifo Control Register + }; + reg32 LCR; // 0x0C - Line Control Register + reg32 MCR; // 0x10 - Modem Control Register (UART1 only) + reg32 LSR; // 0x14 - Line Status Register + reg32 MSR; // 0x18 - Modem Status Register (UART1 only) + reg32 SCR; // 0x1C - Scratch Pad Register + reg32 ACR; // 0x20 - Auto-baud Control Register + reg32 ICR; // 0x24 - IrDA Control Register (UART3 only) + reg32 FDR; // 0x28 - Fractional Divider Register + reg32 _nc; // 0x2C - unused + reg32 TER; // 0x30 - Transmit Enable Register +}; + +enum Parity { + None = 0, + Odd, + Even, + Forced1, + Forced0 +}; + +/* Function: uart_poweron + * Turn on the Uart power + */ +void uart_poweron(int id); + +/* Function: uart_poweroff + * Turn off the Uart power + */ +void uart_poweroff(int id); + +void uart_baud(int id, int baudrate); +void uart_format(int id, int data_bits, Parity parity, int stop_bits); +void uart_enable(int id); +void uart_disable(int id); + +int uart_getc(int id); +void uart_putc(int id, int c); +int uart_readable(int id); +int uart_writable(int id); + +// I2C + +struct I2CRF { + reg32 I2CONSET; // 0x00 - I2C Control Set Register + reg32 I2STAT; // 0x04 - I2C Status Register + reg32 I2DAT; // 0x08 - I2C Data Register + reg32 I2ADR; // 0x0C - I2C Slave Address Register + reg32 I2SCLH; // 0x10 - SCH Duty Cycle Register High + reg32 I2SCLL; // 0x14 - SCL Duty Cycle Register Low + reg32 I2CONCLR; // 0x18 - I2C Control Clear Register +}; + + +void i2c_poweron(int id); +void i2c_poweroff(int id); +void i2c_frequency(int id, int hz); +void i2c_enable(int id); +void i2c_conset(int id, int start, int stop, int interrupt, int acknowledge); +void i2c_conclr(int id, int start, int stop, int interrupt, int acknowledge); +void i2c_wait_SI(int id); +void i2c_clear_SI(int id); +int i2c_status(int id); +int i2c_start(int id, int address); +int i2c_write(int id, int value); +void i2c_stop(int id); +int i2c_read(int id, int last); +int i2c_read(int id); +int i2c_readlast(int id); + +// Timer + + +struct TimerRF { + reg32 ir; // 0x00 + reg32 tcr; // 0x04 + reg32 tc; // 0x08 + reg32 pr; // 0x0C + reg32 pc; // 0x10 + reg32 mcr; // 0x14 + reg32 mr0; // 0x18 + reg32 mr1; // 0x1C + reg32 mr2; // 0x20 + reg32 mr3; // 0x24 + reg32 ccr; // 0x28 + reg32 cr0; // 0x2C + reg32 cr1; // 0x30 + reg32 cr2; // 0x34 + reg32 cr3; // 0x38 + reg32 emr; // 0x3C + reg32 _nc[12]; // 0x40-0x6C + reg32 ctcr; // 0x70 +}; + +/* Function: timer_poweron + * Turn on the Timer power + */ +void timer_poweron(int id); + +/* Function: timer_poweroff + * Turn off the Timer power + */ +void timer_poweroff(int id); + +void timer_start(int id, int hz); +int timer_read(int id); + +//=================================================================== +// VIC +//=================================================================== + +struct VicRF { + reg32 IRQStatus; // 0x000 + reg32 FIQStatus; // 0x004 + reg32 RawIntr; // 0x008 + reg32 IntSelect; // 0x00C + reg32 IntEnable; // 0x010 + reg32 IntEnClr; // 0x014 + reg32 SoftInt; // 0x018 + reg32 SoftIntClear; // 0x01C + reg32 Protection; // 0x020 + reg32 SWPriorityMask; // 0x024 + reg32 _nc[54]; // 0x028-0x0FC + reg32 VectAddr[32]; // 0x100-0x17C + reg32 _nc2[32]; // 0x180-0x1FC + reg32 VectPriority[32]; // 0x200-0x27C + reg32 _nc3[800]; // 0x280-0xEFC + reg32 Address; // 0xF00 +}; + +void vic_init(); +void vic_vector(int id, void (*fptr)(void) /*__irq*/ , int priority); +void vic_enable(int id); +void vic_disable(int id); +void vic_priority(int id, int priority); +void vic_acknowledge(); + + + +} // namespace LPC2300 + +#endif \ No newline at end of file