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

又是十二点了,但是很兴奋,因为从这节课开始,我们将会进行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

(0)

相关推荐

  • 简单的逻辑电路实验(三)

    简单的逻辑电路实验(三) 这几天用proteus模拟了几个基本门电路,而不是在面包板上插元件来实验,是有原因的:遵守安全管理且不给他人添麻烦,不能到办公室里取回器材,因此只是闲适性质的实验. 严格地说 ...

  • Proteus中,单片机仿真数码管显示的设计思路

    使用仿真软件Proteus可以实现单片机控制数码管显示的仿真.该仿真电路包括单片机的最小系统电路.数码管驱动电路,还需要进行编程.Proteus是支持程序联调的,运行后可以看到最终的仿真效果. 1 单 ...

  • CCS5.4+Proteus8的F28027实践课二、定时器0控制LED流水灯

    刚游泳回来,看到昨晚那篇博客访问量比较高,对我是莫大的鼓励,所以马不停蹄的去找了相关的手册准备我们今天的课程. 今天我们要说的是用定时器0产生的定时中断让LED闪烁. 大家都是大部分都是工科出身,应该 ...

  • CCS5.4+Proteus8的F28027实践课三、外部中断0控制LED流水灯

    吃完回来了,跟老弟打了个电话,他正处于事业的迷茫期,希望他早点走出这个状态.好了,现在已经晚上八点过十分了,希望十点前能把外部中断这个主题讲完. 外部中断的概念我还是稍微说下吧,就是你映射的外部中断引 ...

  • CCS5.4+Proteus8的F28027实践课四、并行驱动LCD12864

    趁着时间早,晚上九点四十,我们整理下12864的驱动程序,争取也弄成一个跟TI提供的类似源文件,然后共享给大家. 既然是12864,那最重要的肯定是12864时序的解读,在大学时期,12864还玩的真 ...

  • CCS5.4+Proteus8的F28027实践课五、实验板焊接调试

    今天回来的比较晚,但还是简单的把面包板给焊接调试了下,昨天写的那个12864程序果然不行..只能等明晚再搞了.力争做到一天一更,每天学习进步一点,才不会虚的慌. 今天的主要目的是把面包板焊接出来,稍微 ...

  • CCS5.4+Proteus8的F28027实践课六、实验板焊接调试(12864部分)

    下班早早回家就是为了把昨天没做完的事情搞完,但等我把12864调完之后,好想找块豆腐撞死算了,RS引脚跳线不知道什么时候被我弄断了,我竟然一直没有检查板子,只顾着对着时序图和寄存器检查程序,哎,直接给 ...

  • CCS5.4+Proteus8的F28027实践课七、ADC

    吃完饭回来了,现在开始我们的ADC实践操作. 直奔主题我们,那就是ADC编程操作流程是怎么样的. 其实通过上节理论课的学习,大家心里都应该有了模糊的感觉,一般的步骤如下: 1.使能ADC模块时钟( P ...

  • CCS5.4+Proteus8的F28027实践课八、内置温度传感器

    上午发布的ADC解读部分访问好高,呵呵,我又受鼓舞了,再接再励,把温度传感器这部分弄完就去吃晚饭. 看了下手册,温度传感器东西还真的不多,寄存器就一个ADCCTL1.TEMPCONV,其他的操作跟刚才 ...

  • CCS5.4+Proteus8的F28027实践课九、比较器

    今天写的不顺畅,一个AD写了八个小时,然后一个温度传感器又卡了四个小时,哎,没人能一马平川,特别是搞技术,我们的目的不是走马观花式的学习,而是真正了解寄存器的操作,不要怕时间不够,就怕时间花了还吃不透 ...

  • CCS5.4+Proteus8的F28027实践课十、SPI

    刚刚我们已经把SPI的理论知识部分讲完了,现在我们根据寄存器和时序图来写程序了. 首先,既然是SPI,肯定是复用了GPIO,我们先回顾下GPIO引脚说明: 从上面可以看到我们这次实践课需要复用GPIO ...