问题在哪里呢?从芯片引脚图中我们可以看到,除了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
暂无评论,快来抢沙发吧