TMS320F28374S/7D新建工程文件

本文详细描述了如何在ControlSUITE环境下为F2837xS设备建立工程,包括安装步骤、移植源文件、配置GPIO和定时器,以及编写了一个简单的LED灯闪烁程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、文件准备

首先需要安装controlSUITE,参考Code Composer Studio 问题笔记中的问题三

注意安装目录,下面需要用到!

二、建立工程

1.新建工程

2.移植文件

添加源include文件

分别从目录:

\controlSUITE\device_support\F2837xS\v210\F2837xS_common

\controlSUITE\device_support\F2837xS\v210\F2837xS_headers

中复制include文件夹至工程目录下

右键点击项目浏览器中的项目名,打开Properties(属性),直接在对话框中输入

${PROJECT_ROOT}/include

 表示工程文件夹中的include文件夹

添加源source文件

分别从目录:

\controlSUITE\device_support\F2837xS\v210\F2837xS_common

\controlSUITE\device_support\F2837xS\v210\F2837xS_headers

复制source文件夹至工程目录下

添加cmd文件

在工程目录下创建CMD文件夹,顺便将2837x_FLASH_lnk.cmd文件删除


从目录:

\controlSUITE\device_support\F2837xS\v210\F2837xS_common\cmd

中复制2837xS_Generic_FLASH_lnk和2837xS_Generic_RAM_lnk文件

从目录:

\controlSUITE\device_support\F2837xS\v210\F2837xS_headers\cmd

中复制F2837xS_Headers_nonBIOS

至刚创建的创建CMD文件夹中

三、main编写测试

我把我用LED灯闪烁的程序放在下面,因板子不同,实际引脚可能需要修改

//#include "F2837xS_device.h"
//#include "F2837xS_Examples.h"    // F2837xD Examples Include File
#include "F28x_Project.h"

void GPIO_Setup(void);
__interrupt void cpu_timer0_isr(void);
void spi_xmit(Uint16 a);
void spi_fifo_init(void);
void spi_init(void);
void error(void);
void Bsp_SpiSendRecv(int Len);

#define LED1_ON  GpioDataRegs.GPASET.bit.GPIO24 = 1      //GPIO0置高
#define LED1_OFF GpioDataRegs.GPACLEAR.bit.GPIO24 = 1    //GPIO置低
#define LED2_ON  GpioDataRegs.GPASET.bit.GPIO25 = 1
#define LED2_OFF GpioDataRegs.GPACLEAR.bit.GPIO25 = 1
#define LED3_ON  GpioDataRegs.GPASET.bit.GPIO26 = 1
#define LED3_OFF GpioDataRegs.GPACLEAR.bit.GPIO26 = 1
#define LED4_ON  GpioDataRegs.GPASET.bit.GPIO27 = 1
#define LED4_OFF GpioDataRegs.GPACLEAR.bit.GPIO27 = 1

Uint16 sdata[16]={0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,0x0008};  // send data
Uint16 rdata[16]={0};    // received data
int i=0;

void main(void)
{
// Step 1.  初始化系统,锁相环,看门狗,外设时钟
   InitSysCtrl();
//
 FALSH烧写配置
#ifdef _FLASH
   InitFlash();
#endif

// Step 2. 初始化GPIO:
    InitGpio();
    GPIO_Setup();
//    InitSpibGpio();
    spi_fifo_init();     // Initialize the SPI FIFO
// Step 3. 清除所有中断;初始化中断向量表;禁止CPU中断。
    DINT;

// 初始化PIE控制寄存器至默认状态,默认状态所有PIE中断被禁止;所有标志位被清除。
    InitPieCtrl();

// 禁止所有CPU中断,清除CPU中断相关标志位。
    IER = 0x0000;
    IFR = 0x0000;

// 初始化中断向量表,中断向量表就是采用指针指向中断服务程序入口地址
    InitPieVectTable();

    EALLOW;  // This is needed to write to EALLOW protected registers// 写保护
    PieVectTable.TIMER0_INT = &cpu_timer0_isr;//取 cpu_timer0_isr 地址赋值给TIMER0_INT 中断向量
    EDIS;//关闭保护
    InitCpuTimers();   // For this example, only initialize the Cpu Timers//初始化 CPU 中断
    // Configure CPU-Timer 0, 1, and 2 to interrupt every second:
    // 200MHz CPU Freq, 1 second Period (in uSeconds)选择定时器,CPU频率,定时器周期(单位us)
    ConfigCpuTimer(&CpuTimer0, 200, 1000000);

    CpuTimer0Regs.TCR.all = 0x4000;// 对定时器 0 控制寄存器设置,使能定时器中断
    IER |= M_INT1;//使能第 1 组中断
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1;//使能第 1 组中断的第 7 个小中断,即定时器0

 Enable global Interrupts and higher priority real-time debug events:
    EINT;  //使能全局中断
    ERTM;  // 使能全局中断实时调试

// Step 6. 循环
    while(1)
    {
//        Bsp_SpiSendRecv(8);
//        for(i=0;i<8;i++)
//        {
//        spi_xmit(sdata[i]);
//        rdata[i] = SpibRegs.SPIRXBUF;
//        }
//        DELAY_US(1000*500);
//        for(i=0;i<8;i++)
//        {
//        spi_xmit(rdata[i]);
//        }
        LED2_ON;
        DELAY_US(1000*500);
        LED2_OFF;
        DELAY_US(1000*500);
//
//        if(rdata[0] == 0x0001)
//        {GpioDataRegs.GPATOGGLE.bit.GPIO24 = 1;}
//        if(rdata[1] == 0x0001)
//        {GpioDataRegs.GPATOGGLE.bit.GPIO25 = 1;}
//        if(rdata[2] == 0x0001)
//        {GpioDataRegs.GPATOGGLE.bit.GPIO26 = 1;}
    }
}

//void Bsp_SpiSendRecv(int Len)
//{
// Uint16 i;
// for ( i=0;i<Len;i++ )
//  {
//   SpiaRegs.SPITXBUF=rdata[i];        //发送数据
//   while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { }  //接收FIFO为空时,等待!
//   rdata[i] = SpiaRegs.SPIRXBUF;
//  }
//}

void GPIO_Setup() //配置GPIO的功能
{
    GPIO_SetupPinMux(24, GPIO_MUX_CPU1, 0);//对引脚0设置;选择CPU1为内核,选择外设功能0
    GPIO_SetupPinOptions(24, GPIO_OUTPUT, GPIO_PUSHPULL);//GPIO0,作为输出,上拉
    GPIO_SetupPinMux(25, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(25, GPIO_OUTPUT, GPIO_PUSHPULL);
    GPIO_SetupPinMux(26, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(26, GPIO_OUTPUT, GPIO_PUSHPULL);
    GPIO_SetupPinMux(27, GPIO_MUX_CPU1, 0);
    GPIO_SetupPinOptions(27, GPIO_OUTPUT, GPIO_PUSHPULL);
}

 void cpu_timer0_isr(void)//定时器0中断函数
{
   CpuTimer0.InterruptCount++;

   // Acknowledge this interrupt to receive more interrupts from group 1  确认此中断以接收来自组1的更多中断
   PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;

//   GpioDataRegs.GPATOGGLE.bit.GPIO24 = 1;
//   GpioDataRegs.GPATOGGLE.bit.GPIO25 = 1;
//   GpioDataRegs.GPATOGGLE.bit.GPIO26 = 1;
   GpioDataRegs.GPATOGGLE.bit.GPIO27 = 1;
}

//
// error - Error function that halts the debugger
//
void error(void)
{
    asm("     ESTOP0");     // Test failed!! Stop!
    for (;;);
}

//
// spi_xmit - Transmit value via SPI
//
void spi_xmit(Uint16 a)
{
    SpibRegs.SPITXBUF = a;
}



//
// spi_fifo_init - Initialize SPIA FIFO
//
void spi_fifo_init()
{
    // Initialize SPI FIFO registers
    //
    SpibRegs.SPIFFTX.all = 0xE040;//使能SPIFIFO功能;TXFIFO复位;清除 TXFF INT 中断位;TXFIFO 中 断不使能;
    SpibRegs.SPIFFRX.all = 0x204f;//重新使能接收 FIFO 操作;清RXFIFO中断标志位;中断不使能。
    SpibRegs.SPIFFCT.all = 0x0;//这个寄存器是设置FIFO延时的,不需要用到。

    // Initialize core SPI registers

    SpibRegs.SPIFFRX.bit.RXFIFORESET=1;
}

如有不足,欢迎大家指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值