首先是裸机开发部分,并且和多核无关。我使用了bios_mcsdk_02_01_02_06安装后生成的pdk_C6678_1_1_2_6这个文件夹里的关于TMS320C6678的CSL。 GPIO LED 裸机开发最初的部分当然就是GPIO控制LED小灯了,用于熟悉软件开发的操作。 目标:底板上的LED小灯闪烁 原理:控制LED小灯的是DSP的GPIO04,在GPIO04上周期输出高电平和低电平就可以控制LED灯闪烁了。 代码如下: /*
* main.c
*/
#include "board.h"
#include "c6x.h"
#include "ti/csl/cslr_gpio.h"
#include "ti/csl/csl_gpio.h"
#include "ti/csl/csl_gpioAux.h"
void delay(unsigned int count);
int main(void) {
CSL_GpioHandle hnd;
hnd = CSL_GPIO_open(0); //获取GPIO模块寄存器基地址
CSL_GPIO_setPinDirOutput(hnd, 4); //将GPIO04设置为输出
CSR = 0xffffffff;
for( ; ; )
{
/*熄灭LED*/
CSL_GPIO_setOutputData(hnd, 4); //GPIO04输出高电平
/*延时*/
delay(0x00ffffff);
/*点亮LED*/
CSL_GPIO_clearOutputData(hnd, 4);//GPIO04输出低电平
/*延时*/
delay(0x00ffffff);
}
/* return 0;*/
}
/* 延时函数 */
void delay(volatile unsigned int count)
{
unsigned int i;
for(i= count; i>0; i--);
}
说明: CSL_GpioHandle CSL_GPIO_open (Int32 instNum)
该函数用于返回GPIO模块的寄存器的基地址0x02320000,后面需要用到这个基地址来对寄存器进行操作,其返回值类型CSL_GpioHandle是一个指针,指向一个结构体,该结构体中按顺序列出了GPIO模块的寄存器,所以执行该函数后,hnd就指向了GPIO模块寄存器的基地址,通过hnd可以访问GPIO模块的寄存器。
void CSL_GPIO_setPinDirOutput (CSL_GpioHandle hGpio, Uint8 pinNum)
该函数操作的是相对于基地址偏移0x10的DIR寄存器,从而使pinNum表示的GPIO引脚为输出引脚。这里使GPIO04为输出引脚。
void CSL_GPIO_setOutputData(CSL_GpioHandle hGpio, Uint8 pinNum)
该函数操作的是相对于基地址偏移0x18的SET_DATA寄存器,从而使pinNum引脚上输出高电平。这里使GPIO04输出高电平。
void CSL_GPIO_clearOutputData(CSL_GpioHandle hGpio, Uint8 pinNum)
该函数操作的是相对于基地址偏移0x1c的CLR_DATA寄存器,从而使pinNum引脚上输出低电平。这里使GPIO04输出低电平。
Ps.创龙提供的例程中使用了核心板上的两个LED灯,而因为核心板不提供原理图,创龙提供的这个源码我也没看,所以不知道怎么控制核心板上的LED,这里就是熟悉一下CCS的操作,GPIO模块怎么操作。
疑问:为什么GPIO模块提供了OUT_DATA寄存器可以控制GPIO的输出,还提供了SET_DATA和CLR_DATA寄存器来控制GPIO的输出呢?这个我没整明白。
|