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文件
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. 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
- CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯
- CCS5.4+Proteus8的F28027实践课二、定时器0控制LED流水灯
- CCS5.4+Proteus8的F28027实践课三、外部中断0控制LED流水灯
- CCS5.4+Proteus8的F28027实践课七、ADC
- CCS5.4+Proteus8的F28027实践课八、内置温度传感器
- CCS5.4+Proteus8的F28027实践课九、比较器
- CCS5.4+Proteus8的F28027实践课十、SPI
- CCS5.4+Proteus8的F28027实践课十一、串行12864
- CCS5.4+Proteus8的F28027实践课十二、SCI
- CCS5.4+Proteus8的F28027实践课十三、I2C
- CCS5.4+Proteus8的F28027实践课四、并行驱动LCD12864
- CCS5.4+Proteus8的F28027实践课五、实验板焊接调试
- CCS5.4+Proteus8的F28027实践课六、实验板焊接调试(12864部分)
- LED灯的延时亮灭与循环流水
- 3、LED流水灯控制
- LED的流水灯实验
- P1口外接8个LED,通过按键控制,实现左右移动的流水灯
- led流水灯的实现程序
- 后缀数组 poj 1743 Musical Theme(不重叠最大重复序列)
- 文章标题
- Object.prototype中的成员介绍
- 解决thinkphp设置session周期无效的问题
- 使用Spring进行JDBC数据访问
- CCS5.4+Proteus8的F28027实践课一、延时函数控制LED流水灯
- android开发类库SparseArray与HashMap的研究
- 通过Spring使用JPA进行数据访问
- 集合与IO流结合编写的简单的学生信息管理系统
- 俩种方法实现一个数的二进制位模式从左到右翻转后的值
- u-boot-2016.07README文档结构
- 不使用(a+b)/2这种方式,求两个数的平均值
- URAL 2026 Dean and Schedule 贪心、双端队列(deque)、队列(queue)
- Android模仿新浪微博(主页微博,评论界面)