CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯

来源:互联网 发布:怎样增加淘宝账号的心 编辑:程序博客网 时间:2024/05/19 12:18

又是十二点了,但是很兴奋,因为从这节课开始,我们将会进行F28027一系列的动手实践练习,深入了解一门技术的唯一办法就是多动手实践,多总结反思。
来来来,不扯了,直接开始了。
在正式开始写程序前,我们还有一个问题要解决,那就是CCS5.4默认输出的是.out文件,而我们DSP Proteus仿真需要的是cof文件,所以我们还需要继续设置下CCS工程的属性。
我们在第一节课的时候,已经教大家如何创建一个空的工程,我们直接在那个工程的基础上进行修改。
1、生成hex文件
右键工程名,选择Properties,进去之后,在Build里面,有个Steps-Apply Predefined Step,在下拉框里面选择hex文件
HEX
2、生成cof文件
右键工程名,选择Properties,进去之后,在Build-C2000 Linker-Basic Options里面,out file nameg改成”${ProjName}.cof”
COF
好了,实践之前的准备工作已经都完成了,现在正式开始实践课程。
实践课程主要分为两部分:仿真环境搭建和软件代码编写。
对于仿真环境搭建,我们只说一遍,因为这个东西只要环境搭建好了,后续的实践课稍微调整下电路就行了,没太大的必要每节课都说。
硬件环境搭建
1、新建工程
工程创建
新建工程,如图所示,不停的下一步下一步,建一个空的工程。
2、新建Schematic Capture文件
直接点击工具栏的ISIS蓝色底纹的图标即可
ISIS
3、在仿真库中挑选所需要的器件
选择器件
选择器件的顺序如图里面的圈圈序号所示,在本次实践课中,我们需要F28027芯片、LED。
4、画仿真图
画图
画好的仿真图如上所示。
5、指定仿真所需要的cof可执行文件
指定文件
如图圈圈所示,圈圈里面有个文件夹图标,点进去选择到我们最开始设置的那个空工程的cof文件。
硬件仿真环境已经设置完成,由于cof文件我们也选好了,后续完成软件编写编译后,直接点击左下角的开始键进行系统仿真功能仿真。
硬件环境已经OK,现在重点说软件编程部分了。
要开始动手写之前,我们要先理清楚F28027程序的开发流程:
编程流程
前面部分,包括F2802x_CodeStartBranch.asm文件,已经都有了,而且我们在前面的课程中,也基本都把这些东西给讲到了,至于CMD文件,TI已经提供了非常标准的链接文件,也是不用我们再另外去写,直接使用就行了,我们只要理解里面的代码含义,然后借用,做最高效的开发。我们唯一要做的就是用到什么文件或者功能,就修改对应的文件,其他的全部保持不变就行了。
既然我们这节课是LED流水灯,那肯定要用GPIO端口去输出高低电平去控制,所以需要GPIO控制文件F2802x_Gpio.c,把C:\ti\controlSUITE\device_support\f2802x\v200\f2802x_common\source路径下的F2802x_Gpio.c文件拷贝到
D:\study\day001\project\src路径下。
从上面的硬件环境中可以看到,我们要把GPIO0-GPIO7设置为GPIO输出端口,当输出低电平时,LED亮,输出高电平时,LED灭。
目的很明确了,那我们就去GPIO.c文件里面进行相应的设置操作:
1、选择GPIO0-GPIO7为普通GPIO引脚;
2、设置引脚为输出引脚;
3、输入鉴定滤波与SYSCLKOUT同步;
4、使能上拉电阻;
代码如下:

void InitGpio(void){   EALLOW;   // Each GPIO pin can be:   // a) a GPIO input/output   // b) peripheral function 1   // c) peripheral function 2   // d) peripheral function 3   // By default, all are GPIO Inputs   GpioCtrlRegs.GPAMUX1.all = 0x0000;     // GPIO functionality GPIO0-GPIO15   GpioCtrlRegs.GPAMUX2.all = 0x0000;     // GPIO functionality GPIO16-GPIO31   GpioCtrlRegs.GPBMUX1.all = 0x0000;     // GPIO functionality GPIO32-GPIO34   GpioCtrlRegs.AIOMUX1.all = 0x0000;     // Dig.IO funct. applies to AIO2,4,6,10,12,14   GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;      // GPIO0-GPIO31 are GP outputs   GpioCtrlRegs.GPBDIR.all = 0x0000;      // GPIO32-GPIO34 are inputs   GpioCtrlRegs.AIODIR.all = 0x0000;      // AIO2,4,6,19,12,14 are digital inputs   // Each input can have different qualification   // a) input synchronized to SYSCLKOUT   // b) input qualified by a sampling window   // c) input sent asynchronously (valid for peripheral inputs only)   GpioCtrlRegs.GPAQSEL1.all = 0x0000;    // GPIO0-GPIO15 Synch to SYSCLKOUT   GpioCtrlRegs.GPAQSEL2.all = 0x0000;    // GPIO16-GPIO31 Synch to SYSCLKOUT   GpioCtrlRegs.GPBQSEL1.all = 0x0000;    // GPIO32-GPIO34 Synch to SYSCLKOUT   // Pull-ups can be enabled or disabled.   GpioCtrlRegs.GPAPUD.all = 0x0000;      // Pullup's enabled GPIO0-GPIO31   GpioCtrlRegs.GPBPUD.all = 0x0000;      // Pullup's enabled GPIO32-GPIO34   //GpioCtrlRegs.GPAPUD.all = 0xFFFF;    // Pullup's disabled GPIO0-GPIO31   //GpioCtrlRegs.GPBPUD.all = 0xFFFF;    // Pullup's disabled GPIO32-GPIO34   EDIS;}

GPIO.c文件设置完之后,去main.c主函数里面,给GPIO0-GPIO7一个初始值,然后用翻转寄存器进行GPADAT值的变换,代码如下:

void main(void){// Step 1. Initialize System Control:// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP2802x_SysCtrl.c file.   InitSysCtrl();// Step 2. Initalize GPIO:// This example function is found in the DSP2802x_Gpio.c file and// illustrates how to set the GPIO to it's default state.   InitGpio();// Step 3. Clear all interrupts and initialize PIE vector table:// Disable CPU interrupts   DINT;// Initialize PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags// are cleared.// This function is found in the DSP2802x_PieCtrl.c file.   InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:   IER = 0x0000;   IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example.  This is useful for debug purposes.// The shell ISR routines are found in DSP2802x_DefaultIsr.c.// This function is found in DSP2802x_PieVect.c.   InitPieVectTable();// Step 4. Initialize all the Device Peripherals:// This function is found in DSP2802x_InitPeripherals.c// InitPeripherals(); // Not required for this example// Step 5. User specific code:   GpioDataRegs.GPADAT.all = 0x00000000;  //GPIO0-GPIO31 initial value are 0   while(1)   {       GpioDataRegs.GPATOGGLE.all=0x000000ff;       DELAY_US(1000);   }}

写完之后进行编译,生成cof文件,在仿真环境里面点击运行
效果图
可以看到流水灯以1ms的频率进行闪烁,达到本次课程的预期效果,真高兴,看来前面几节课的基础确实很重要,只要把思路理清楚了,程序还是比较简单的,现在一点半了,明天希望可以搞到12864那里,呵呵,现在洗洗睡了,最近几天白天状态都不怎么好,示例程序我会传到CSDN下载库和qq群里面。
菜鸟交流qq群107691092

1 0
原创粉丝点击