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了。
GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO);        //设置P05复用功能为GPIO功能
  •         GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5);                //设置P05为输出模式
  •         P05 =0;
  • 复制代码
         将以上代码加到例程的main.c的main函数里,编译,下载,LED点亮。      怎样让LED闪烁起来呢?先置0,再延时,再置1,再延时,不断重复执行。原先的8051就这样做了,做个例程可以,但占用了CPU全部时间,很不合算。EPWM可以代替这件事,首先在工程的LIB目录增加epwm.c文件,然后在User目录下增加epwma.c文件,加入如下代码:
    #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);
  •         }
  • 复制代码
         在User目录下增加epwma.h文件,加入如下代码:
    #include "cms8s6990.h"
  •           void EPWM_Config(void);
  • 复制代码
         剩下的就是在main函数里调用EPWM_Config()函数,编译下载,闪烁效果就实现了。
    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)
  •         {
  •                 ;
  •         }
  • }
  • 复制代码
          还增加了一个EXTINT_Config()函数调用,实现了P05接口LED亮灭切换功能,在中断处理子程序增加如下代码:     
    void INT0_IRQHandler(void)  interrupt INT0_VECTOR
  • {
  •             P05 =~P05;
  • }
  • 复制代码
         当然前提是设置了P13为INT0 输入端,具体参照上面EPWM调用方式,主要代码如下:
    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();                                                         //寮€鍚€讳腑鏂?
  •        
  • }
  • 复制代码
          最后附上程序工程文件包给你参考。 LED_ON.rar (6.53 MB, 下载次数: 23)
    全部回复 0
    暂无评论,快来抢沙发吧