参照TI的driver_example创建CCS5.2的工程,要求绝对的移植性,这个工程复制到任何一台装有CCS v5的电脑上都能编译通过,不需要改动任何地方,包括路径。
首先,下载安装TI的2802x C/C++ Header Files and PeripheralExamples,以2802x为例,下载地址:http://www.ti.com/tool/sprc832
建立一个文件夹,按照项目的意义命名,最好保存在全英文路径目录下。
然后,把2802x C/C++ Header Files andPeripheral Examples安装目录下的DSP2802x_common文件夹和DSP2802x_headers文件夹复制到这个文件夹里。
然后在这个文件夹里在新建一个文件夹,命名为project。
在2802x C/C++ Header Files andPeripheral Examples安装目录下找到需要用到的cmd文件和asm文件复制到这个文件夹下,如下图:
在此文件夹下新建一个文件夹,命名为src:
打开src文件夹,在2802x C/C++ Header Files andPeripheral Examples安装目录下找到这些文件复制到src中
如果还需要其他的文件,比如要用到AD,就把DSP2802x_Adc.c文件也复制到此文件夹中,这个文件夹用来放c语言的源文件。
然后,打开CCS v5。单击Project,选择New CCS Project。按下图设置:
然后看到ccs左侧的资源管理视图中已经出现了我们刚刚建立的test的工程。我们刚刚建立的test的工程。
右击test项目,单击Properties
在General下可以设置芯片,仿真器,cmd文件等
Optimization页面下可以设置优化等级。
Include Options页面可以设置头文件路径。我们如下设置:
在Predefined Symbols页面下可以定义一些宏,用于条件编译等
在C2000 Linker下的File Search Path页面可以设置库文件的路径。我们如下设置:
右击src,新建一个文件,这里命名为main.c
在main.c中写下测试程序,点击编译,如果有c2000 Launchpad,点击Debug,把程序下到tms320f28027的ram里调试,将会看到板子上的流水灯。以后创建工程就以此为模板,复制修改即可。
测试代码:
#include "DSP28x_Project.h" // Device Headerfile and Examples Include File
void Gpio_select(void);
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(); // Skipped for this example
// For this example use the following configuration:
Gpio_select();
// 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:
while(1)
{
GpioDataRegs.GPADAT.all = 0x0000000e;
DELAY_US(1000000);
GpioDataRegs.GPADAT.all = 0x0000000d;
DELAY_US(1000000);
GpioDataRegs.GPADAT.all = 0x0000000b;
DELAY_US(1000000);
GpioDataRegs.GPADAT.all = 0x00000007;
DELAY_US(1000000);
}
}
void Gpio_select(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPAMUX2.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPBMUX1.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs
GpioCtrlRegs.GPBDIR.all = 0x0000000F; // All outputs
EDIS;
}
//=========================================================================
// No more.
//=========================================================================