
问题在哪里呢?从芯片引脚图中我们可以看到,除了VDD和GND,两个电源引脚,剩下的22个引脚全成了IO口,确切地说,这些IO口的区别不见了,配置更灵活了,而原先那些我们熟悉的功能引脚,包括复位、晶振引脚还在,但都被包在芯片的内部,需要通过配置连接到任一个引脚上,才能使用,这是首先需要理解的。

首先一个问题是点亮接在IO口上的一个灯该如何点亮,在开发板上已经接了两个LED供实验用,分别接在P04、P05两个引脚,还有一个简单按钮接在P13脚。

从LED连接引脚看,我们应该用语句P05=0来点亮一个LED,但是因为引脚IO的通用性这个过程变得复杂了一些,首先我们得了解一下GPIO引脚的灵活性,需要通过配置来完成需要的功能。

这段介绍里内容很丰富,关于GPIO有六个寄存器实现控制,这就是GPIO因灵活而变得复杂的主要原因。确切地说,寄存器就是一组组电子开关,将引脚和内部各种设施电路,包括上拉、下拉电阻进行连接或断开,实现丰富的功能切换。寄存器因为多了非常复杂,开发板例程中利用了库函数文件,只需通过调用相应的库函数就能对寄存器对应的位进行置位、清零。

很多简单配置寄存器数值函数就定义在gpio.h文件里,配置P05,并通过输出0,就能点亮LED了。
GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO); //设置P05复用功能为GPIO功能 GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5); //设置P05为输出模式 P05 =0;
复制代码 #include "epwma.h" void EPWM_Config(void) { //设置EPWM运行模式 EPWM_ConfigRunMode(EPWM_WFG_COMPLEMENTARY|EPWM_OC_INDEPENDENT|EPWM_OCU_SYMMETRIC|EPWM_COUNT_UP_DOWN); //互补模式+输出独立模式+对称计数模式+上下计数(中心对齐)模式 //设置EPWM运行时钟 EPWM_ConfigChannelClk(EPWM0, EPWM_CLK_DIV_32); //设置EPWM 周期 EPWM_ConfigChannelPeriod(EPWM0, 0xffff); //设置EPWM占空比 EPWM_ConfigChannelSymDuty(EPWM0, 0x7960); //设置EPWM的加载方式为自动加载 EPWM_EnableAutoLoadMode(EPWM_CH_0_MSK); //设置EPWM的输出极性 EPWM_DisableReverseOutput(EPWM_CH_0_MSK); //关闭反向输出 //设置EPWM输出 EPWM_EnableOutput(EPWM_CH_0_MSK); //开启输出 //设置EPWM死区 EPWM_DisableDeadZone(EPWM0); EPWM_DisableDeadZone(EPWM2); EPWM_DisableDeadZone(EPWM4); //设置EPWM中断 EPWM_EnableZeroInt(EPWM_CH_0_MSK); //开启EPWM零点中断 EPWM_AllIntEnable(); //开启EPWM总中断 IRQ_SET_PRIORITY(IRQ_PWM,IRQ_PRIORITY_HIGH); IRQ_ALL_ENABLE(); //开启总中断 //设置EPWM输出IO复用 GPIO_SET_MUX_MODE(P04CFG, GPIO_MUX_PG0); //开启EPWM EPWM_Start(EPWM_CH_0_MSK); }
复制代码 #include "cms8s6990.h" void EPWM_Config(void);
复制代码int main(void){ GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO); //设置P05复用功能为#define GPIO_MUX_GPIO(0x00)/*GPIO功能*/ GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5); //设置P05为输出模式 P05 =0; EPWM_Config(); EXTINT_Config(); while(1) { ; } }
复制代码void INT0_IRQHandler(void) interrupt INT0_VECTOR{ P05 =~P05; }
复制代码void EXTINT_Config(void){ /* (1)璁剧疆EXTINT鍔熻兘 */ EXTINT_ConfigInt(EXTINT0, EXTINT_TRIG_FALLING); //INT0 涓嬮檷娌胯Е鍙戜腑鏂? /* (2)璁剧疆EXTINT IO鍙? */ GPIO_ENABLE_UP(P1UP, GPIO_PIN_3); //寮€鍚疨13涓婃媺 GPIO_SET_PS_MODE(PS_INT0, GPIO_P13); //澶嶇敤涓篒NT0 杈撳叆鍔熻兘 /* (3)璁剧疆EXTINT涓柇 */ EXTINT_EnableInt(EXTINT0); IRQ_SET_PRIORITY(IRQ_EXINT0, IRQ_PRIORITY_HIGH); IRQ_ALL_ENABLE(); //寮€鍚€讳腑鏂? }
复制代码
全部回复 0