123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400 |
- /*----------------------------------------------------------------------------------------------------
- INCLUDE HEADE FILES
- ----------------------------------------------------------------------------------------------------*/
- #include "Platform.h"
- #include "test_config.h"
- IoHandler_callback IoHandler_Callback = (IoHandler_callback)0;
- /* ---------------------------------------------------------------------------------------------------
- - 用户配置如下系统IO功能
- ----------------------------------------------------------------------------------------------------*/
- gpio_config_t gpio_mux_config = {
- /*CPR_CTL_MUXCTL1*/
- .mux1_ctl.pad1.gpio15 = 0, .mux1_ctl.pad1.gpio14 = 0, .mux1_ctl.pad1.gpio13 = 0, .mux1_ctl.pad1.gpio12 = 0,
- .mux1_ctl.pad1.gpio11 = 0, .mux1_ctl.pad1.gpio10 = 0, .mux1_ctl.pad1.gpio9 = 0, .mux1_ctl.pad1.gpio8 = 0,
- .mux1_ctl.pad1.gpio7 = 0, .mux1_ctl.pad1.gpio6 = 0, .mux1_ctl.pad1.gpio5 = 0, .mux1_ctl.pad1.gpio4 = 0,
- .mux1_ctl.pad1.gpio3 = 0, .mux1_ctl.pad1.gpio2 = 0, .mux1_ctl.pad1.gpio1 = 0, .mux1_ctl.pad1.gpio0 = 0,
- /*CPR_CTL_MUXCTL2*/
- .mux2_ctl.pad2.swd = 0, .mux2_ctl.pad2.swk = 0, .mux2_ctl.pad2.bootctl =0, .mux2_ctl.pad2.gpio28 = 0,
- .mux2_ctl.pad2.gpio27 = 0, .mux2_ctl.pad2.gpio26 = 0, .mux2_ctl.pad2.gpio25 = 0, .mux2_ctl.pad2.gpio24 = 0,
- .mux2_ctl.pad2.gpio23 = 0, .mux2_ctl.pad2.gpio22 = 0, .mux2_ctl.pad2.gpio21 = 0, .mux2_ctl.pad2.gpio20 = 0,
- .mux2_ctl.pad2.gpio19 = 0, .mux2_ctl.pad2.gpio18 = 0, .mux2_ctl.pad2.gpio17 = 0, .mux2_ctl.pad2.gpio16 = 0
- };
- /* ------------------------------------------------------------------------------------------------------------------
- - 用户配置如下IO复用控制 -
- 0:GPIO_Dx 1:UART0_TX 2:UART0_RX 3:UART0_CTS 4:UART0_RTS 5:I2C_SCL 6:I2C_SDA 7:UART1_RX 8:UART1_TX
- 9:SIM_IO 10:SIM_RST 11:SIM_CLK_OUT 12:PWM0 13:PWM1 14:SSI1_CLK 15:SSI1_SSN 16:SSI1_RX 17:SSI1_TX
- -------------------------------------------------------------------------------------------------------------------*/
- gpio_fun_sel_config_t gpio_fun_sel_config = {
-
- /*CPR_GPIO_FUN_SEL0*/.fun_sel0.bits.b0004= GPIO_Dx,/*GPIO 0*/.fun_sel0.bits.b0812= GPIO_Dx,/*GPIO 1*/.fun_sel0.bits.b1620= GPIO_Dx,/*GPIO 2*/.fun_sel0.bits.b2428= GPIO_Dx,/*GPIO 3*/
- /*CPR_GPIO_FUN_SEL1*/.fun_sel1.bits.b0004= GPIO_Dx,/*GPIO 4*/.fun_sel1.bits.b0812= GPIO_Dx,/*GPIO 5*/.fun_sel1.bits.b1620= GPIO_Dx,/*GPIO 6*/.fun_sel1.bits.b2428= GPIO_Dx,/*GPIO 7*/
- /*CPR_GPIO_FUN_SEL2*/.fun_sel2.bits.b0004= GPIO_Dx,/*GPIO 8*/.fun_sel2.bits.b0812= GPIO_Dx,/*GPIO 9*/.fun_sel2.bits.b1620= GPIO_Dx,/*GPIO10*/.fun_sel2.bits.b2428= GPIO_Dx,/*GPIO11*/
- /*CPR_GPIO_FUN_SEL3*/.fun_sel3.bits.b0004= GPIO_Dx,/*GPIO12*/.fun_sel3.bits.b0812= GPIO_Dx,/*GPIO13*/.fun_sel3.bits.b1620= GPIO_Dx,/*GPIO14*/.fun_sel3.bits.b2428= GPIO_Dx,/*GPIO15*/
- /*CPR_GPIO_FUN_SEL4*/.fun_sel4.bits.b0004= GPIO_Dx,/*GPIO16*/.fun_sel4.bits.b0812= GPIO_Dx,/*GPIO17*/.fun_sel4.bits.b1620=UART0_TX,/*GPIO18*/.fun_sel4.bits.b2428=UART0_RX,/*GPIO19*/
- /*CPR_GPIO_FUN_SEL5*/.fun_sel5.bits.b0004= GPIO_Dx,/*GPIO20*/.fun_sel5.bits.b0812= GPIO_Dx,/*GPIO21*/.fun_sel5.bits.b1620= GPIO_Dx,/*GPIO22*/.fun_sel5.bits.b2428= GPIO_Dx,/*GPIO23*/
- /*CPR_GPIO_FUN_SEL6*/.fun_sel6.bits.b0004= GPIO_Dx,/*GPIO24*/.fun_sel6.bits.b0812= GPIO_Dx,/*GPIO25*/.fun_sel6.bits.b1620= GPIO_Dx,/*GPIO26*/.fun_sel6.bits.b2428= GPIO_Dx,/*GPIO27*/
- /*CPR_GPIO_FUN_SEL7*/.fun_sel7.bits.b0004= GPIO_Dx,/*GPIO28*/.fun_sel7.bits.b0812= GPIO_Dx,/*GPIO29*/.fun_sel7.bits.b1620= GPIO_Dx,/*GPIO30*/.fun_sel7.bits.b2428= GPIO_Dx /*GPIO31*/
-
- };
- /* ---------------------------------------------------------------------------------------------------
- - 用户配置如下系统IO的中断模式 NOT_INT(无中断) RIS_EDGE_INT(上升沿中断) FAIL_EDGE_INT(下降沿中断)
- ----------------------------------------------------------------------------------------------------*/
- interrupt_config_t interrupt_config = {
- /*GPIO_INTR_CTRL0*/.intr_ctl0.pad.mode3=NOT_INT,/*GPIO 3*/.intr_ctl0.pad.mode2=NOT_INT,/*GPIO 2*/.intr_ctl0.pad.mode1=NOT_INT,/*GPIO 1*/.intr_ctl0.pad.mode0=NOT_INT,/*GPIO 0*/
- /*GPIO_INTR_CTRL1*/.intr_ctl1.pad.mode3=NOT_INT,/*GPIO 7*/.intr_ctl1.pad.mode2=NOT_INT,/*GPIO 6*/.intr_ctl1.pad.mode1=NOT_INT,/*GPIO 5*/.intr_ctl1.pad.mode0=NOT_INT,/*GPIO 4*/
- /*GPIO_INTR_CTRL2*/.intr_ctl2.pad.mode3=NOT_INT,/*GPIO11*/.intr_ctl2.pad.mode2=NOT_INT,/*GPIO10*/.intr_ctl2.pad.mode1=NOT_INT,/*GPIO 9*/.intr_ctl2.pad.mode0=NOT_INT,/*GPIO 8*/
- /*GPIO_INTR_CTRL3*/.intr_ctl3.pad.mode3=NOT_INT,/*GPIO15*/.intr_ctl3.pad.mode2=NOT_INT,/*GPIO14*/.intr_ctl3.pad.mode1=NOT_INT,/*GPIO13*/.intr_ctl3.pad.mode0=NOT_INT,/*GPIO12*/
- /*GPIO_INTR_CTRL4*/.intr_ctl4.pad.mode3=NOT_INT,/*GPIO19*/.intr_ctl4.pad.mode2=NOT_INT,/*GPIO18*/.intr_ctl4.pad.mode1=NOT_INT,/*GPIO17*/.intr_ctl4.pad.mode0=NOT_INT,/*GPIO16*/
- /*GPIO_INTR_CTRL5*/.intr_ctl5.pad.mode3=NOT_INT,/*GPIO23*/.intr_ctl5.pad.mode2=NOT_INT,/*GPIO22*/.intr_ctl5.pad.mode1=NOT_INT,/*GPIO21*/.intr_ctl5.pad.mode0=NOT_INT,/*GPIO20*/
- /*GPIO_INTR_CTRL6*/.intr_ctl6.pad.mode3=NOT_INT,/*GPIO27*/.intr_ctl6.pad.mode2=NOT_INT,/*GPIO26*/.intr_ctl6.pad.mode1=NOT_INT,/*GPIO25*/.intr_ctl6.pad.mode0=NOT_INT,/*GPIO24*/
- /*GPIO_INTR_CTRL7*/.intr_ctl7.pad.mode3=NOT_INT,/*GPIO31*/.intr_ctl7.pad.mode2=NOT_INT,/*GPIO30*/.intr_ctl7.pad.mode1=NOT_INT,/*GPIO29*/.intr_ctl7.pad.mode0=NOT_INT,/*GPIO28*/
- };
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: Init_gpio
- - 函数功能: Gpio模块初始化
- - 输入参数: 无
- - 创建日期: 2016-05-24
- ----------------------------------------------------------------------------------------------------*/
- void Init_gpio(void)
- {
- __write_hw_reg32(CPR_CTLAPBCLKEN_GRCTL , 0x40004); /*gpio_pclk enable*/
- __write_hw_reg32(CPR_OTHERCLKEN_GRCTL , 0x10001); /*gpio_clk enable*/
- __write_hw_reg32(CPR_GPIO_FUN_SEL0 , gpio_fun_sel_config.fun_sel0.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL1 , gpio_fun_sel_config.fun_sel1.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL2 , gpio_fun_sel_config.fun_sel2.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL3 , gpio_fun_sel_config.fun_sel3.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL4 , gpio_fun_sel_config.fun_sel4.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL5 , gpio_fun_sel_config.fun_sel5.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL6 , gpio_fun_sel_config.fun_sel6.config);
- __write_hw_reg32(CPR_GPIO_FUN_SEL7 , gpio_fun_sel_config.fun_sel7.config);
- __write_hw_reg32(CPR_CTL_MUXCTL1 , gpio_mux_config.mux1_ctl.muxctl1);
- __write_hw_reg32(CPR_CTL_MUXCTL2 , gpio_mux_config.mux2_ctl.muxctl2);
- __write_hw_reg32(GPIO_INTR_CTRL0 , (0xF0000|(interrupt_config.intr_ctl0.interrupt))); __write_hw_reg32(GPIO_INTR_CTRL1 , (0xF0000|(interrupt_config.intr_ctl1.interrupt)));
- __write_hw_reg32(GPIO_INTR_CTRL2 , (0xF0000|(interrupt_config.intr_ctl2.interrupt))); __write_hw_reg32(GPIO_INTR_CTRL3 , (0xF0000|(interrupt_config.intr_ctl3.interrupt)));
- __write_hw_reg32(GPIO_INTR_CTRL4 , (0xF0000|(interrupt_config.intr_ctl4.interrupt))); __write_hw_reg32(GPIO_INTR_CTRL5 , (0xF0000|(interrupt_config.intr_ctl5.interrupt)));
- __write_hw_reg32(GPIO_INTR_CTRL6 , (0xF0000|(interrupt_config.intr_ctl6.interrupt))); __write_hw_reg32(GPIO_INTR_CTRL7 , (0xF0000|(interrupt_config.intr_ctl7.interrupt)));
- NVIC_EnableIRQ(GPIO_IRQn);
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_mux_pin_ctl
- - 函数功能: pin脚连接控制
- - 输入参数: mux
- - 创建日期: 2019-12-03
- - 48 PIN脚
- - GPIO0 : 【mux=0 连接到gpio_d[0] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO1 : 【mux=0 连接到gpio_d[1] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO2 : 【mux=0 连接到gpio_d[2] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO3 : 【mux=0 连接到gpio_d[3] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO4 : 【mux=0 连接到gpio_d[4] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO5 : 【mux=0 连接到gpio_d[5] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO6 : 【mux=0 连接到gpio_d[6] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO7 : 【mux=0 连接到gpio_d[7] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO8 : 【mux=0 连接到gpio_d[8] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO9 : 【mux=0 连接到gpio_d[9] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO10: 【mux=0 连接到gpio_d[10]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO11: 【mux=0 连接到gpio_d[11]】 【mux=1 NA】 【mux=2 txen】 【mux=3 NA】
- - GPIO12: 【mux=0 连接到gpio_d[12]】 【mux=1 NA】 【mux=2 rxen】 【mux=3 NA】
- - GPIO13: 【mux=0 连接到gpio_d[13]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO14: 【mux=0 连接到gpio_d[14]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO15: 【mux=0 连接到gpio_d[15]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO16: 【mux=0 连接到gpio_d[16]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO17: 【mux=0 连接到gpio_d[17]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO18: 【mux=0 连接到gpio_d[18]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO19: 【mux=0 连接到gpio_d[19]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO20: 【mux=0 连接到gpio_d[20]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO21: 【mux=0 连接到gpio_d[21]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO22: 【mux=0 连接到gpio_d[22]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO23: 【mux=0 连接到gpio_d[23]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO24: 【mux=0 连接到gpio_d[24]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO25: 【mux=0 连接到gpio_d[25]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO27: 【mux=0 连接到gpio_d[27]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO28: 【mux=0 连接到gpio_d[28]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO29: 【mux=0 连接到BOOT_CTL 】 【mux=1 连接到gpio_d[29]】 【mux=1 NA】 【mux=2 NA】
- - GPIO30: 【mux=0 连接到SWI的 SWCK】 【mux=1 连接到gpio_d[30]】 【mux=1 NA】 【mux=2 NA】
- - GPIO31: 【mux=0 连接到SWI的 SWD 】 【mux=1 连接到gpio_d[31]】 【mux=1 NA】 【mux=2 NA】
- - 32/16 PIN脚
- - GPIO0 : 【mux=0 连接到gpio_d[0] 】 【mux=1 NA】 【mux=2 pwm2】 【mux=3 NA】
- - GPIO1 : 【mux=0 连接到gpio_d[1] 】 【mux=1 NA】 【mux=2 pwm3】 【mux=3 NA】
- - GPIO2 : 【mux=0 连接到gpio_d[2] 】 【mux=1 NA】 【mux=2 clk_12M_out】【mux=3 NA】
- - GPIO3 : 【mux=0 连接到gpio_d[3] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO4 : 【mux=0 连接到gpio_d[4] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO5 : 【mux=0 连接到gpio_d[5] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO6 : 【mux=0 连接到gpio_d[6] 】 【mux=1 NA】 【mux=2 txen】 【mux=3 NA】
- - GPIO7 : 【mux=0 连接到gpio_d[7] 】 【mux=1 NA】 【mux=2 rxen】 【mux=3 NA】
- - GPIO8 : 【mux=0 连接到gpio_d[8] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO9 : 【mux=0 连接到gpio_d[9] 】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO10: 【mux=0 连接到gpio_d[10]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO11: 【mux=0 连接到BOOT_CTL 】 【mux=1 连接到gpio_d[11]】 【mux=2 NA】 【mux=3 NA】
- - GPIO12: 【mux=0 连接到SWI的 SWCK】 【mux=1 连接到gpio_d[12]】 【mux=2 NA】 【mux=3 pwm4】
- - GPIO13: 【mux=0 连接到SWI的 SWD 】 【mux=1 连接到gpio_d[13]】 【mux=2 NA】 【mux=3 pwm5】
- - GPIO14: 【mux=0 连接到gpio_d[14]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO18: 【mux=0 连接到gpio_d[18]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO19: 【mux=0 连接到gpio_d[19]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO20: 【mux=0 连接到gpio_d[20]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO21: 【mux=0 连接到gpio_d[21]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO22: 【mux=0 连接到gpio_d[22]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO23: 【mux=0 连接到gpio_d[23]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO24: 【mux=0 连接到gpio_d[24]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - GPIO25: 【mux=0 连接到gpio_d[25]】 【mux=1 NA】 【mux=2 NA】 【mux=3 NA】
- - ----------------------------------------------------------------------------------------------------*/
- void gpio_mux_ctl(uint8_t num,uint8_t mux)
- {
- if(mux>3) return;
- uint32_t temp=0;
- __read_hw_reg32((CPR_CTL_MUXCTL1+(num/16)),temp);
- temp=(temp&(~(0x3<<((num%16)*2))))|(mux<<((num%16)*2));
- __write_hw_reg32((CPR_CTL_MUXCTL1+(num/16)),temp);
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_fun_inter
- - 函数功能: gpio中断模式设置
- - 输入参数: gpio编号0-28 中断类型0无中断 5上升沿中断 7下降沿中断
- -【inter=0 GPIO关闭中断:NOT_INT 】
- -【inter=5 GPIO上升沿中断:RIS_EDGE_INT 】
- -【inter=7 GPIO下降沿中断:FAIL_EDGE_INT】
- -【inter=9 GPIO上升沿下降沿中断:RIS_FAIL_EDGE_INT】
- - 创建日期: 2019-12-03
- ----------------------------------------------------------------------------------------------------*/
- void gpio_fun_inter(uint8_t num,uint8_t inter)
- {
- unsigned int temp=0;
- if(inter>0xF) return;
- switch(num%4)
- {
- case 3:__read_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);temp &= 0x0FFF;temp |= ((inter<<12)|0xF0000);__write_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);break;
- case 2:__read_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);temp &= 0xF0FF;temp |= ((inter<< 8)|0xF0000);__write_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);break;
- case 1:__read_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);temp &= 0xFF0F;temp |= ((inter<< 4)|0xF0000);__write_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);break;
- case 0:__read_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);temp &= 0xFFF0;temp |= ((inter )|0xF0000);__write_hw_reg32((GPIO_INTR_CTRL0+(num/4)),temp);break;
- default:break;
- }
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_fun_sel
- - 函数功能: gpio复用功能设置
- - 输入参数: gpio编号0-28 sel复用
- -【sel=0 普通GPIO功能:GPIO_Dx 】
- -【sel=1 串口0发送:UART0_TX 】
- -【sel=2 串口0接收::UART0_RX 】
- -【sel=3 串口0流控:UART0_CTS 】
- -【sel=4 串口0流控:UART0_RTS 】
- -【sel=5 I2C时钟:I2C_SCL 】
- -【sel=6 I2C数据:I2C_SDA 】
- -【sel=7 串口1接收:UART1_RX 】
- -【sel=8 串口1发送:UART1_TX 】
- -【sel=9 SIM_IO 】
- -【sel=10 SIM_RST 】
- -【sel=11 SIM_CLK_OUT 】
- -【sel=12 PWM0输出:PWM0 】
- -【sel=13 PWM1输出:PWM1 】
- -【sel=14 SPI1时钟:SSI1_CLK 】
- -【sel=15 SPI1片选:SSI1_SSN 】
- -【sel=16 SPI1接收:SSI1_RX 】
- -【sel=17 SPI1发送:SSI1_TX 】
- -【sel=18 PWM0互补输出:PWM0_INV(32/16PIN新增)】
- -【sel=19 PWM1互补输出:PWM1_INV(32/16PIN新增)】
- - 创建日期: 2019-12-03
- ----------------------------------------------------------------------------------------------------*/
- void gpio_fun_sel(uint8_t num,uint8_t sel)
- {
-
- unsigned int temp=0;
- if(sel>19) return;
- switch(num%4)
- {
- case 0:__read_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);temp &= 0xFFFFFF00;temp |= sel; __write_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);break;
- case 1:__read_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);temp &= 0xFFFF00FF;temp |= (sel<< 8);__write_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);break;
- case 2:__read_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);temp &= 0xFF00FFFF;temp |= (sel<<16);__write_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);break;
- case 3:__read_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);temp &= 0x00FFFFFF;temp |= (sel<<24);__write_hw_reg32((CPR_GPIO_FUN_SEL0+(num/4)),temp);break;
- default:break;
- }
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_Register_Callback
- - 函数功能: 为gpio注册中断回调函数
- - 输入参数: 中断状态值
- - 创建日期: 2016-05-26
- ----------------------------------------------------------------------------------------------------*/
- void gpio_Register_Callback(IoHandler_callback callback)
- {
- IoHandler_Callback = callback;
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: GPIO_Handler
- - 函数功能: GPIO0中断处理函数
- - 输入参数: 无
- - 创建日期: 2016-05-26
- ----------------------------------------------------------------------------------------------------*/
- void GPIO_Handler(void)
- {
- uint32_t val;
- __read_hw_reg32(GPIO_INTR_STATUS_C00 , val);/*read interrupt flag*/
- __write_hw_reg32(GPIO_INTR_CLR0 , val); /*clean interrupt flag*/
- if(IoHandler_Callback != (IoHandler_callback)0)
- IoHandler_Callback(val);
-
- if(DETECT_INTER_NUM(GPIO_PIN_24,val))//判断是否为GPIO24中断
- {
- printf("GPIO24 interrupt\n");
- }
- printf("interrupt:%#x\n",val);
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_output_high
- - 函数功能: Gpio输出高电平
- - 输入参数: gpio编号 (< 29)
- - 创建日期: 2016-05-24
- ----------------------------------------------------------------------------------------------------*/
- void gpio_output_high(uint8_t num)
- {
- __write_hw_reg32((GPIO_PORT_DR0 + (num>>4)), (0x00010001<<(num&0x0F)));
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_output_low
- - 函数功能: Gpio输出低电平
- - 输入参数: gpio编号 (< 29)
- - 创建日期: 2016-05-24
- ----------------------------------------------------------------------------------------------------*/
- void gpio_output_low(uint8_t num)
- {
- __write_hw_reg32((GPIO_PORT_DR0 + (num>>4)), (0x00010000<<(num&0x0F)));
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_input_val
- - 函数功能: 获取GPIO管脚状态
- - 输入参数: gpio编号
- - 输出参数: 高低电平值
- - 创建日期: 2016-06-07
- ----------------------------------------------------------------------------------------------------*/
- uint8_t gpio_input_val(uint8_t num)
- {
- uint32_t val;
- __read_hw_reg32((GPIO_EXT_PORT0 + (num>>5)), val);
- return (val & (0x01L << (num & 0x1F)))? (1) : (0);
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_direction_output
- - 函数功能: 设置GPIO管脚方向为输出
- - 输入参数: gpio编号
- - 创建日期: 2016-06-07
- ----------------------------------------------------------------------------------------------------*/
- void gpio_direction_output(uint8_t num)
- {
- __write_hw_reg32((GPIO_PORT_DDR0 + (num>>4)), ((0x10001)<<(num&0x0F)));
- }
- /* ---------------------------------------------------------------------------------------------------
- - 函数名称: gpio_direction_input
- - 函数功能: 设置GPIO管脚方向为输入
- - 输入参数: gpio编号 , 上下拉状态(0代表上拉 1代表下拉 其他代表无上下拉)
- -【pull_up_type=0 GPIO上拉:GPIO_Mode_Input_Up 】
- -【pull_up_type=1 GPIO下拉:GPIO_Mode_Input_Down 】
- -【pull_up_type=2 GPIO浮空:GPIO_Mode_Input_Float】
- - 创建日期: 2016-06-07
- ----------------------------------------------------------------------------------------------------*/
- void gpio_direction_input(uint8_t num, uint8_t pull_up_type)
- {
- uint8_t temp_num=num;
- uint32_t val;
- uint32_t* base_reg = 0x0;
- //uint32_t pos = (num&0x0f)<<1;
- // if(num>=0 && num<=4)
- // {
- // base_reg = (uint32_t*)(0x40002400+0x38);
- // }
- if( num<=4)
- {
- base_reg = (uint32_t*)(0x40002400+0x38);
- }
- else if(num>=5 && num<=15)
- {
- base_reg = (uint32_t*)(0x40002400+0x34);
- #ifdef PIN_32_16
- if(num==11) {num=13;base_reg = (uint32_t*)(0x40002400+0x38);}
- else if(num==12){num=14;base_reg = (uint32_t*)(0x40002400+0x38);}
- else if(num==13){num=15;base_reg = (uint32_t*)(0x40002400+0x38);}
- #endif
- }
- else if(num>=16 && num<=28)
- {
- base_reg = (uint32_t*)(0x40002400+0x38);
- num = num%16;
- }
-
- __read_hw_reg32(base_reg , val);
- if(pull_up_type == 1)//下拉
- {
- setbit(val,num*2);
- clrbit(val,num*2+1);
- }
- else if(pull_up_type == 0)//上拉
- {
- clrbit(val,num*2);
- setbit(val,num*2+1);
- }
-
- else//无上下拉
- {
- clrbit(val,num*2);
- clrbit(val,num*2+1);
- }
- __write_hw_reg32(base_reg, val);
-
- __write_hw_reg32((GPIO_PORT_DDR0 + (temp_num>>4)), ((0x10000)<<(temp_num&0x0F)));
- __write_hw_reg32((GPIO_DEBOUNCE0 + (temp_num>>4)), ((0x10001)<<(temp_num&0x0F)));
- }
- void GPIO_Sleep_Config(void)
- {
-
- //配置上下拉
- __write_hw_reg32((volatile unsigned *)(0x40002400+0x34),0x55555555); //pectrl1 = 0x55555555
- __write_hw_reg32((volatile unsigned *)(0x40002400+0x38),0x55555555); //pectrl2 = 0x55555555
- // __write_hw_reg32((volatile unsigned *)(0x40002400+0x3c),0xF); //spi0 flash脚上下拉配置(如果不配置会漏电200多微安)
-
- //关闭所有GPIO中断
- __write_hw_reg32(GPIO_INTR_CTRL0,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL1,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL2,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL3,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL4,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL5,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL6,0xF0000);
- __write_hw_reg32(GPIO_INTR_CTRL7,0xF0000);
- //将所有GPIO管脚配置成输入下拉
- for(int i=0;i<32;i++)
- {
- gpio_direction_input(i,1);
- }
- //将所有GPIO管脚配置成普通IO口
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xC0),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xC4),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xC8),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xCC),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xD0),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xD4),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xD8),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0xDC),0x0);
- //连接控制 mux=0
- __write_hw_reg32((volatile unsigned *)(0x40000000+0x128),0x0);
- __write_hw_reg32((volatile unsigned *)(0x40000000+0x12C),0x0);
- }
|