ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TMS320F280049C 学习笔记4 Led_ex1_blinky及初始化函数

2020-03-13 13:05:07  阅读:690  来源: 互联网

标签:LED1 blinky Led PIN 例程 PIE TMS320F280049C DEVICE GPIO


前言

承接上一篇学习笔记,这次开始实际运行例程。每学习一个新的DSP都是从点灯开始,这次也不例外。TI的官方帮助文档[1]可以在C:\ti\c2000\C2000Ware_2_01_00_00\device_support\f28004x\docs\F28004x_DEV_USER_GUIDEpdf找到。里面为新人提供了step by step的入门指南以及所有例程的说明。TI提供了两套例程,其中寄存器编程的例程在C:\ti\c2000\C2000Ware_2_01_00_00\device_support\f28004x,库函数编程的例程在C:\ti\c2000\C2000Ware_2_01_00_00\driverlib\f28004x\examples。本次实验参考的例程是Led_ex1_blinky。未来学习其他型号的DSP也可以按此步骤开始。

关于条件编译

在文献[1]中有这样的描述条件编译
在CCS9.3中对应的设置为:CCS9.3设置
这个设置的目的是为了匹配不同的硬件。对于两款处理器28379D和280049C,TI分别发布了ControlCARD和LaunchPad,他们的晶振和引脚配置等各不相同。例程是针对ControlCARD开发的,如果想将其应用到LaunchPad上,自然需要更改引脚映射。具体的代码可以在devices.h中找到,部分截图如下:条件编译2
需要说明的是,如果完全自己从零开始定义引脚,开发程序,并不需要理会这部分条件编译指令。

例程

这小节给出来自官方文件夹的Led闪烁实验的两份例程,第一份是库函数编程版本的,第二份是寄存器编程的。可以看出在初始化函数的调用部分有显著差别。

库函数版:

#include "driverlib.h"
#include "device.h"

# define LOOP_COUNT 10

void main(void)
{
    // 初始化时钟和外设 Initialize device clock and peripherals
    Device_init();

    // 初始化GPIO并设置为推挽输出 Initialize GPIO and configure the GPIO pin as a push-pull output
    Device_initGPIO();
    GPIO_setPadConfig(DEVICE_GPIO_PIN_LED1, GPIO_PIN_TYPE_STD);  // Push-pull output or floating input
    GPIO_setDirectionMode(DEVICE_GPIO_PIN_LED1, GPIO_DIR_MODE_OUT);

    // 初始化PIE并清空PIE寄存器,关闭CPU中断
    // Initialize PIE and clear PIE registers. Disables CPU interrupts. 
    Interrupt_initModule();

    // 初始化PIE向量表
    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    Interrupt_initVectorTable();

    // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
    EINT;
    ERTM;

    // Loop Forever
    for(;;)
    {
        // Turn on LED
        // 硬件电路设计是GPIO输出低电平时LED亮
        GPIO_writePin(DEVICE_GPIO_PIN_LED1, 0);

        // 延迟0.5s Delay for a bit.
        DEVICE_DELAY_US(500000);

        // Turn off LED
        GPIO_writePin(DEVICE_GPIO_PIN_LED1, 1);

        // Delay for a bit.
        DEVICE_DELAY_US(500000);
    }
}

寄存器版:

#include "F28x_Project.h"

#define DEVICE_GPIO_PIN_LED1    31


void main(void)
{
    // Initialize device clock and peripherals
    InitSysCtrl();

    // Initialize GPIO and configure the GPIO pin as a push-pull output
    InitGpio();
    GPIO_SetupPinMux(DEVICE_GPIO_PIN_LED1, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(DEVICE_GPIO_PIN_LED1, GPIO_OUTPUT, GPIO_PUSHPULL);

    // Initialize PIE and clear PIE registers. Disables CPU interrupts. 
    DINT;
    InitPieCtrl();
    IER = 0x0000;
    IFR = 0x0000;

    // Initialize the PIE vector table with pointers to the shell Interrupt
    // Service Routines (ISR).
    InitPieVectTable();

    // Enable Global Interrupt (INTM) and realtime interrupt (DBGM)
    EINT;
    ERTM;

    // Loop Forever
    for(;;)
    {
        // Turn on LED
        GPIO_WritePin(DEVICE_GPIO_PIN_LED1, 0);

        // Delay for a bit.
        DELAY_US(500000);

        // Turn off LED
        GPIO_WritePin(DEVICE_GPIO_PIN_LED1, 1);

        // Delay for a bit.
        DELAY_US(500000);
    }
}

初始化函数 InitSysCtrl()

讨论寄存器编程的文章比较多,这里参考[4]进行总结。
第二份代码主函数后第一条语句就是InitSysCtrl(),对芯片进行初始化,该函数的声明在f28004x_sysctrl.c中。

看门狗

初始化函数的第一句是关闭了看门狗,具体代码如下:

void DisableDog(void)
{
    volatile Uint16 temp;
    EALLOW;

    //
    // Grab the clock config so we don't clobber it
    //
    temp = WdRegs.WDCR.all & 0x0007;
    WdRegs.WDCR.all = 0x0068 | temp;
    EDIS;
}

这个代码写的比过去的版本好很多,没有直接赋值,而是采用或的方式,避免了破坏其他时钟设置。
在[5]的3.1节有对EALLOW进行讨论。EALLOW
在3.14.23.4节有对寄存器的每一位给出详细的解释在这里插入图片描述
在这里插入图片描述
根据手册,关闭看门狗对应的二进制是0000 0000 0110 1000,也就是十六进制的0068

其他

剩下的部分就是初始化Flash、锁相环等内容,各种外设时钟。以目前的水平看这部分代码还比较困难,暂时跳过。
在这部分,280049C会涉及到一个叫DCC的名词,全称是Dual-Clock Comparator,主要是为了增强时钟信号的可靠性的,在[5]的第6章有论述。

参考文献

  1. F28004x Firmware Development Package USER’S GUIDE
  2. F28377D学习系列(一)
  3. EINT DINT ERTM DRTM EALLOW EDIS ESTOP0的理解
  4. TMS320F28069 学习--------InitSysCtrl();
  5. TMS320F28004x Microcontrollers Technical Reference Manual
  6. 2,TMS320F28069 学习--------GPIO输出 流水灯

标签:LED1,blinky,Led,PIN,例程,PIE,TMS320F280049C,DEVICE,GPIO
来源: https://blog.csdn.net/whyorwhnt/article/details/104835071

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有