📄 ops.h
字号:
p = (n) / 32; \ o = (n) % 32; \ __gpio_port_as_input(p, o); \} while (0)#define __gpio_set_pin(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ __gpio_port_data(p) |= (1 << o); \} while (0)#define __gpio_clear_pin(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ __gpio_port_data(p) &= ~(1 << o); \} while (0)static __inline__ unsigned int __gpio_get_pin(unsigned int n){ unsigned int p, o; p = (n) / 32; o = (n) % 32; if (__gpio_port_data(p) & (1 << o)) return 1; else return 0;}#define __gpio_set_irq_detect_manner(p, o, m) \do { \ unsigned int tmp; \ if (o < 16) { \ tmp = REG_GPIO_GPIDLR(p); \ tmp &= ~(3 << ((o) << 1)); \ tmp |= ((m) << ((o) << 1)); \ REG_GPIO_GPIDLR(p) = tmp; \ } else { \ tmp = REG_GPIO_GPIDUR(p); \ tmp &= ~(3 << (((o)-16) << 1)); \ tmp |= ((m) << (((o)-16) << 1)); \ REG_GPIO_GPIDUR(p) = tmp; \ } \} while (0)#define __gpio_port_as_irq(p, o, m) \do { \ __gpio_port_as_input(p, o); \ __gpio_set_irq_detect_manner(p, o, m); \ REG_GPIO_GPIER(p) |= (1 << o); \} while (0)#define __gpio_as_irq(n, m) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ __gpio_port_as_irq(p, o, m); \} while (0)#define __gpio_as_irq_high_level(n) __gpio_as_irq(n, GPIO_IRQ_HILEVEL)#define __gpio_as_irq_low_level(n) __gpio_as_irq(n, GPIO_IRQ_LOLEVEL)#define __gpio_as_irq_fall_edge(n) __gpio_as_irq(n, GPIO_IRQ_FALLEDG)#define __gpio_as_irq_rise_edge(n) __gpio_as_irq(n, GPIO_IRQ_RAISEDG)#define __gpio_mask_irq(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ REG_GPIO_GPIER(p) &= ~(1 << o); \} while (0)#define __gpio_unmask_irq(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ REG_GPIO_GPIER(p) |= (1 << o); \} while (0)#define __gpio_ack_irq(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ REG_GPIO_GPFR(p) |= (1 << o); \} while (0)static __inline__ unsigned int __gpio_get_irq(void){ unsigned int tmp, i; tmp = REG_GPIO_GPFR(3); for (i=0; i<32; i++) if (tmp & (1 << i)) return 0x60 + i; tmp = REG_GPIO_GPFR(2); for (i=0; i<32; i++) if (tmp & (1 << i)) return 0x40 + i; tmp = REG_GPIO_GPFR(1); for (i=0; i<32; i++) if (tmp & (1 << i)) return 0x20 + i; tmp = REG_GPIO_GPFR(0); for (i=0; i<32; i++) if (tmp & (1 << i)) return i; return 0;}#define __gpio_group_irq(n) \({ \ register int tmp, i; \ tmp = REG_GPIO_GPFR((n)); \ for (i=31;i>=0;i--) \ if (tmp & (1 << i)) \ break; \ i; \})#define __gpio_enable_pullupdown(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ REG_GPIO_GPPUR(p) |= (1 << o); \} while (0)#define __gpio_disable_pullupdown(n) \do { \ unsigned int p, o; \ p = (n) / 32; \ o = (n) % 32; \ REG_GPIO_GPPUR(p) &= ~(1 << o); \} while (0)/* Init the alternate function pins */#define __gpio_as_ssi() \do { \ REG_GPIO_GPALR(2) &= 0xFC00FFFF; \ REG_GPIO_GPALR(2) |= 0x01550000; \} while (0)#define __gpio_as_uart3() \do { \ REG_GPIO_GPAUR(0) &= 0xFFFF0000; \ REG_GPIO_GPAUR(0) |= 0x00005555; \} while (0)#define __gpio_as_uart2() \do { \ REG_GPIO_GPALR(3) &= 0x3FFFFFFF; \ REG_GPIO_GPALR(3) |= 0x40000000; \ REG_GPIO_GPAUR(3) &= 0xF3FFFFFF; \ REG_GPIO_GPAUR(3) |= 0x04000000; \} while (0)#define __gpio_as_uart1() \do { \ REG_GPIO_GPAUR(0) &= 0xFFF0FFFF; \ REG_GPIO_GPAUR(0) |= 0x00050000; \} while (0)#define __gpio_as_uart0() \do { \ REG_GPIO_GPAUR(3) &= 0x0FFFFFFF; \ REG_GPIO_GPAUR(3) |= 0x50000000; \} while (0)#define __gpio_as_scc0() \do { \ REG_GPIO_GPALR(2) &= 0xFFFFFFCC; \ REG_GPIO_GPALR(2) |= 0x00000011; \} while (0)#define __gpio_as_scc1() \do { \ REG_GPIO_GPALR(2) &= 0xFFFFFF33; \ REG_GPIO_GPALR(2) |= 0x00000044; \} while (0)#define __gpio_as_scc() \do { \ __gpio_as_scc0(); \ __gpio_as_scc1(); \} while (0)#define __gpio_as_dma() \do { \ REG_GPIO_GPALR(0) &= 0x00FFFFFF; \ REG_GPIO_GPALR(0) |= 0x55000000; \ REG_GPIO_GPAUR(0) &= 0xFF0FFFFF; \ REG_GPIO_GPAUR(0) |= 0x00500000; \} while (0)#define __gpio_as_msc() \do { \ REG_GPIO_GPALR(1) &= 0xFFFF000F; \ REG_GPIO_GPALR(1) |= 0x00005550; \} while (0)#define __gpio_as_pcmcia() \do { \ REG_GPIO_GPAUR(2) &= 0xF000FFFF; \ REG_GPIO_GPAUR(2) |= 0x05550000; \} while (0)#define __gpio_as_emc(csmask) \do { \ REG_GPIO_GPALR(2) &= 0x3FFFFFFF; \ REG_GPIO_GPALR(2) |= 0x40000000; \ REG_GPIO_GPAUR(2) &= 0xFFFF0000; \ REG_GPIO_GPAUR(2) |= 0x00005555; \} while (0)#define __gpio_as_lcd_slave() \do { \ REG_GPIO_GPALR(1) &= 0x0000FFFF; \ REG_GPIO_GPALR(1) |= 0x55550000; \ REG_GPIO_GPAUR(1) &= 0x00000000; \ REG_GPIO_GPAUR(1) |= 0x55555555; \} while (0)#define __gpio_as_lcd_master() \do { \ REG_GPIO_GPALR(1) &= 0x0000FFFF; \ REG_GPIO_GPALR(1) |= 0x55550000; \ REG_GPIO_GPAUR(1) &= 0x00000000; \ REG_GPIO_GPAUR(1) |= 0x556A5555; \} while (0)#define __gpio_as_usb() \do { \ REG_GPIO_GPAUR(0) &= 0x00FFFFFF; \ REG_GPIO_GPAUR(0) |= 0x55000000; \} while (0)#define __gpio_as_ac97() \do { \ REG_GPIO_GPALR(2) &= 0xC3FF03FF; \ REG_GPIO_GPALR(2) |= 0x24005400; \} while (0)#define __gpio_as_i2s_slave() \do { \ REG_GPIO_GPALR(2) &= 0xC3FF0CFF; \ REG_GPIO_GPALR(2) |= 0x14005100; \} while (0)#define __gpio_as_i2s_master() \do { \ REG_GPIO_GPALR(2) &= 0xC3FF0CFF; \ REG_GPIO_GPALR(2) |= 0x28005100; \} while (0)#define __gpio_as_eth() \do { \ REG_GPIO_GPAUR(3) &= 0xFC000000; \ REG_GPIO_GPAUR(3) |= 0x01555555; \} while (0)#define __gpio_as_pwm() \do { \ REG_GPIO_GPAUR(2) &= 0x0FFFFFFF; \ REG_GPIO_GPAUR(2) |= 0x50000000; \} while (0)#define __gpio_as_ps2() \do { \ REG_GPIO_GPALR(1) &= 0xFFFFFFF0; \ REG_GPIO_GPALR(1) |= 0x00000005; \} while (0)#define __gpio_as_uprt() \do { \ REG_GPIO_GPALR(1) &= 0x0000000F; \ REG_GPIO_GPALR(1) |= 0x55555550; \ REG_GPIO_GPALR(3) &= 0xC0000000; \ REG_GPIO_GPALR(3) |= 0x15555555; \} while (0)#define __gpio_as_cim() \do { \ REG_GPIO_GPALR(0) &= 0xFF000000; \ REG_GPIO_GPALR(0) |= 0x00555555; \} while (0)/*************************************************************************** * HARB ***************************************************************************/#define __harb_usb0_udc() \do { \ REG_HARB_HAPOR &= ~HARB_HAPOR_UCHSEL; \} while (0)#define __harb_usb0_uhc() \do { \ REG_HARB_HAPOR |= HARB_HAPOR_UCHSEL; \} while (0)#define __harb_set_priority(n) \do { \ REG_HARB_HAPOR = ((REG_HARB_HAPOR & ~HARB_HAPOR_PRIO_MASK) | n); \} while (0)/*************************************************************************** * I2C ***************************************************************************/#define __i2c_enable() ( REG_I2C_CR |= I2C_CR_I2CE )#define __i2c_disable() ( REG_I2C_CR &= ~I2C_CR_I2CE )#define __i2c_send_start() ( REG_I2C_CR |= I2C_CR_STA )#define __i2c_send_stop() ( REG_I2C_CR |= I2C_CR_STO )#define __i2c_send_ack() ( REG_I2C_CR &= ~I2C_CR_AC )#define __i2c_send_nack() ( REG_I2C_CR |= I2C_CR_AC )#define __i2c_set_drf() ( REG_I2C_SR |= I2C_SR_DRF )#define __i2c_clear_drf() ( REG_I2C_SR &= ~I2C_SR_DRF )#define __i2c_check_drf() ( REG_I2C_SR & I2C_SR_DRF )#define __i2c_received_ack() ( !(REG_I2C_SR & I2C_SR_ACKF) )#define __i2c_is_busy() ( REG_I2C_SR & I2C_SR_BUSY )#define __i2c_transmit_ended() ( REG_I2C_SR & I2C_SR_TEND )#define __i2c_set_clk(dev_clk, i2c_clk) \ ( REG_I2C_GR = (dev_clk) / (16*(i2c_clk)) - 1 )#define __i2c_read() ( REG_I2C_DR )#define __i2c_write(val) ( REG_I2C_DR = (val) )/*************************************************************************** * UDC ***************************************************************************/#define __udc_set_16bit_phy() ( REG_UDC_DevCFGR |= UDC_DevCFGR_PI )#define __udc_set_8bit_phy() ( REG_UDC_DevCFGR &= ~UDC_DevCFGR_PI )#define __udc_enable_sync_frame() ( REG_UDC_DevCFGR |= UDC_DevCFGR_SS )#define __udc_disable_sync_frame() ( REG_UDC_DevCFGR &= ~UDC_DevCFGR_SS )#define __udc_self_powered() ( REG_UDC_DevCFGR |= UDC_DevCFGR_SP )#define __udc_bus_powered() ( REG_UDC_DevCFGR &= ~UDC_DevCFGR_SP )#define __udc_enable_remote_wakeup() ( REG_UDC_DevCFGR |= UDC_DevCFGR_RW )#define __udc_disable_remote_wakeup() ( REG_UDC_DevCFGR &= ~UDC_DevCFGR_RW )#define __udc_set_speed_high() \do { \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -