CMS8S6990开发板虽是8051内核的芯片开发板,但因为GPIO的改进、增能,使得入门,即使是点亮IO口的灯这样在51开发中的简单基础的操作也变得有些难度。通过一番探索,终于成功地完成了LED点亮及闪烁的效果,先上个图。
       8e9a3d15a1b2caee6bc4291c037835ef.gif
      问题在哪里呢?从芯片引脚图中我们可以看到,除了VDD和GND,两个电源引脚,剩下的22个引脚全成了IO口,确切地说,这些IO口的区别不见了,配置更灵活了,而原先那些我们熟悉的功能引脚,包括复位、晶振引脚还在,但都被包在芯片的内部,需要通过配置连接到任一个引脚上,才能使用,这是首先需要理解的。

             24脚定义.jpg
      首先一个问题是点亮接在IO口上的一个灯该如何点亮,在开发板上已经接了两个LED供实验用,分别接在P04、P05两个引脚,还有一个简单按钮接在P13脚。
       板载按钮及LED.jpg
     从LED连接引脚看,我们应该用语句P05=0来点亮一个LED,但是因为引脚IO的通用性这个过程变得复杂了一些,首先我们得了解一下GPIO引脚的灵活性,需要通过配置来完成需要的功能。
      GPIO.jpg
     这段介绍里内容很丰富,关于GPIO有六个寄存器实现控制,这就是GPIO因灵活而变得复杂的主要原因。确切地说,寄存器就是一组组电子开关,将引脚和内部各种设施电路,包括上拉、下拉电阻进行连接或断开,实现丰富的功能切换。寄存器因为多了非常复杂,开发板例程中利用了库函数文件,只需通过调用相应的库函数就能对寄存器对应的位进行置位、清零。
       gpio.c.jpg
      很多简单配置寄存器数值函数就定义在gpio.h文件里,配置P05,并通过输出0,就能点亮LED了。
  1. GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO);        //设置P05复用功能为GPIO功能
  2.         GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5);                //设置P05为输出模式
  3.         P05 =0;
     将以上代码加到例程的main.c的main函数里,编译,下载,LED点亮。      怎样让LED闪烁起来呢?先置0,再延时,再置1,再延时,不断重复执行。原先的8051就这样做了,做个例程可以,但占用了CPU全部时间,很不合算。EPWM可以代替这件事,首先在工程的LIB目录增加epwm.c文件,然后在User目录下增加epwma.c文件,加入如下代码:
  1. #include "epwma.h"
  2.         void EPWM_Config(void)
  3.         {
  4.         //设置EPWM运行模式
  5.         EPWM_ConfigRunMode(EPWM_WFG_COMPLEMENTARY|EPWM_OC_INDEPENDENT|EPWM_OCU_SYMMETRIC|EPWM_COUNT_UP_DOWN); //互补模式+输出独立模式+对称计数模式+上下计数(中心对齐)模式
  6.         //设置EPWM运行时钟       
  7.         EPWM_ConfigChannelClk(EPWM0, EPWM_CLK_DIV_32);               
  8.         //设置EPWM 周期       
  9.         EPWM_ConfigChannelPeriod(EPWM0, 0xffff);
  10.         //设置EPWM占空比
  11.         EPWM_ConfigChannelSymDuty(EPWM0, 0x7960);
  12.         //设置EPWM的加载方式为自动加载
  13.         EPWM_EnableAutoLoadMode(EPWM_CH_0_MSK);
  14.         //设置EPWM的输出极性
  15.         EPWM_DisableReverseOutput(EPWM_CH_0_MSK); //关闭反向输出
  16.         //设置EPWM输出
  17.         EPWM_EnableOutput(EPWM_CH_0_MSK);                //开启输出
  18.         //设置EPWM死区
  19.         EPWM_DisableDeadZone(EPWM0);
  20.         EPWM_DisableDeadZone(EPWM2);
  21.         EPWM_DisableDeadZone(EPWM4);
  22.         //设置EPWM中断
  23.         EPWM_EnableZeroInt(EPWM_CH_0_MSK);                                //开启EPWM零点中断
  24.         EPWM_AllIntEnable();                                                        //开启EPWM总中断
  25.         IRQ_SET_PRIORITY(IRQ_PWM,IRQ_PRIORITY_HIGH);
  26.         IRQ_ALL_ENABLE();                                                                //开启总中断
  27.         //设置EPWM输出IO复用
  28.         GPIO_SET_MUX_MODE(P04CFG, GPIO_MUX_PG0);
  29.         //开启EPWM
  30.         EPWM_Start(EPWM_CH_0_MSK);
  31.         }
     在User目录下增加epwma.h文件,加入如下代码:
  1. #include "cms8s6990.h"
  2.           void EPWM_Config(void);
     剩下的就是在main函数里调用EPWM_Config()函数,编译下载,闪烁效果就实现了。
  1. int main(void)
  2. {
  3.         GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO);        //设置P05复用功能为#define  GPIO_MUX_GPIO(0x00)/*GPIO功能*/
  4.         GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5);                //设置P05为输出模式
  5.         P05 =0;
  6.         EPWM_Config();
  7.         EXTINT_Config();  
  8.         while(1)
  9.         {
  10.                 ;
  11.         }
  12. }
      还增加了一个EXTINT_Config()函数调用,实现了P05接口LED亮灭切换功能,在中断处理子程序增加如下代码:     
  1. void INT0_IRQHandler(void)  interrupt INT0_VECTOR
  2. {
  3.             P05 =~P05;
  4. }
     当然前提是设置了P13为INT0 输入端,具体参照上面EPWM调用方式,主要代码如下:
  1. void EXTINT_Config(void)
  2. {
  3.         /*
  4.         (1)璁剧疆EXTINT鍔熻兘
  5.         */
  6.        
  7.         EXTINT_ConfigInt(EXTINT0, EXTINT_TRIG_FALLING);                //INT0 涓嬮檷娌胯Е鍙戜腑鏂?
  8.         /*
  9.         (2)璁剧疆EXTINT IO鍙?
  10.         */       
  11.         GPIO_ENABLE_UP(P1UP, GPIO_PIN_3);                                //寮€鍚疨13涓婃媺
  12.         GPIO_SET_PS_MODE(PS_INT0, GPIO_P13);                        //澶嶇敤涓篒NT0 杈撳叆鍔熻兘
  13.         /*
  14.         (3)璁剧疆EXTINT涓柇
  15.         */               
  16.         EXTINT_EnableInt(EXTINT0);
  17.         IRQ_SET_PRIORITY(IRQ_EXINT0, IRQ_PRIORITY_HIGH);
  18.         IRQ_ALL_ENABLE();                                                         //寮€鍚€讳腑鏂?
  19.        
  20. }
      最后附上程序工程文件包给你参考。 LED_ON.rar (6.53 MB, 下载次数: 23)
全部回复 0
暂无评论,快来抢沙发吧