CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯
2016-07-31 00:09
573 查看
又是十二点了,但是很兴奋,因为从这节课开始,我们将会进行F28027一系列的动手实践练习,深入了解一门技术的唯一办法就是多动手实践,多总结反思。
来来来,不扯了,直接开始了。
在正式开始写程序前,我们还有一个问题要解决,那就是CCS5.4默认输出的是.out文件,而我们DSP Proteus仿真需要的是cof文件,所以我们还需要继续设置下CCS工程的属性。
我们在第一节课的时候,已经教大家如何创建一个空的工程,我们直接在那个工程的基础上进行修改。
1、生成hex文件
右键工程名,选择Properties,进去之后,在Build里面,有个Steps-Apply Predefined Step,在下拉框里面选择hex文件
2、生成cof文件
右键工程名,选择Properties,进去之后,在Build-C2000 Linker-Basic Options里面,out file nameg改成”${ProjName}.cof”
好了,实践之前的准备工作已经都完成了,现在正式开始实践课程。
实践课程主要分为两部分:仿真环境搭建和软件代码编写。
对于仿真环境搭建,我们只说一遍,因为这个东西只要环境搭建好了,后续的实践课稍微调整下电路就行了,没太大的必要每节课都说。
硬件环境搭建
1、新建工程
新建工程,如图所示,不停的下一步下一步,建一个空的工程。
2、新建Schematic Capture文件
直接点击工具栏的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、使能上拉电阻;
代码如下:
GPIO.c文件设置完之后,去main.c主函数里面,给GPIO0-GPIO7一个初始值,然后用翻转寄存器进行GPADAT值的变换,代码如下:
写完之后进行编译,生成cof文件,在仿真环境里面点击运行
可以看到流水灯以1ms的频率进行闪烁,达到本次课程的预期效果,真高兴,看来前面几节课的基础确实很重要,只要把思路理清楚了,程序还是比较简单的,现在一点半了,明天希望可以搞到12864那里,呵呵,现在洗洗睡了,最近几天白天状态都不怎么好,示例程序我会传到CSDN下载库和qq群里面。
菜鸟交流qq群107691092
来来来,不扯了,直接开始了。
在正式开始写程序前,我们还有一个问题要解决,那就是CCS5.4默认输出的是.out文件,而我们DSP Proteus仿真需要的是cof文件,所以我们还需要继续设置下CCS工程的属性。
我们在第一节课的时候,已经教大家如何创建一个空的工程,我们直接在那个工程的基础上进行修改。
1、生成hex文件
右键工程名,选择Properties,进去之后,在Build里面,有个Steps-Apply Predefined Step,在下拉框里面选择hex文件
2、生成cof文件
右键工程名,选择Properties,进去之后,在Build-C2000 Linker-Basic Options里面,out file nameg改成”${ProjName}.cof”
好了,实践之前的准备工作已经都完成了,现在正式开始实践课程。
实践课程主要分为两部分:仿真环境搭建和软件代码编写。
对于仿真环境搭建,我们只说一遍,因为这个东西只要环境搭建好了,后续的实践课稍微调整下电路就行了,没太大的必要每节课都说。
硬件环境搭建
1、新建工程
新建工程,如图所示,不停的下一步下一步,建一个空的工程。
2、新建Schematic Capture文件
直接点击工具栏的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. Ini 4000 tSysCtrl(); // 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
相关文章推荐
- CCS5.4+Proteus8的F28027实践课二、定时器0控制LED流水灯
- CCS5.4+Proteus8的F28027实践课十、SPI
- CCS5.4+Proteus8的F28027实践课六、实验板焊接调试(12864部分)
- CCS5.4+Proteus8的F28027实践课十二、SCI
- CCS5.4+Proteus8的F28027实践课十三、I2C
- CCS5.4+Proteus8的F28027实践课十一、串行12864
- CCS5.4+Proteus8的F28027实践课五、实验板焊接调试
- CCS5.4+Proteus8的F28027实践课七、ADC
- CCS5.4+Proteus8的F28027实践课四、并行驱动LCD12864
- CCS5.4+Proteus8的F28027实践课九、比较器
- LED灯的延时亮灭与循环流水
- [Linux项目实践] 物联网单板测试之任务三:OLED菜单控制LED
- PHP5.4第二天—流程控制、系统函数和自定义函数
- stm32学习的日子-构建库函数雏形(第1节)—寄存器结构体定义控制点亮G0Kitv2.1 LED2和LED4
- P1口外接8个LED,通过按键控制,实现左右移动的流水灯
- 通过4412提供的函数控制蜂鸣器和流水灯
- LED显示(4):使用内核IO操作及延时函数
- [Linux项目实践] 物联网单板测试之任务三:OLED菜单控制LED
- 2440汇编控制LED(IO端口)和串口输出,用于调试wince的startup.s函数
- (一)GPIO 编程实验 LED 流水灯控制