说明:下面的教程我是参考开发板提供的代码例子
void main(void)
{
// 步骤 1. 初始化系统控制:
// 设置PLL, WatchDog, 使能外设时钟
// 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到..
InitSysCtrl();
// 步骤 2. 初始化通用输入输出多路复用器GPIO:
// 这个函数在DSP2833x_Gpio.c源文件中被定义了
// 这个函数使GPIO控制类寄存器初始化到默认状态
// InitGpio(); // 本例不用此子函数
// 本例使用下面的GPIO配置
Gpio_select();
// 步骤 3. 清除所有中断初始化中断向量表:
// 禁止CPU全局中断
DINT;
// 初始化PIE控制寄存器到他们的默认状态.
// 这个默认状态就是禁止PIE中断及清除所有PIE中断标志
// 这个函数放在DSP2833x_PieCtrl.c源文件里
InitPieCtrl();
// 禁止CPU中断和清除所有CPU中断标志
IER = 0x0000;
IFR = 0x0000;
//初始化PIE中断向量表,并使其指向中断服务子程序(ISR)
// 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中
// 这个函数放在了DSP2833x_PieVect.c源文件里面.
InitPieVectTable();
// 步骤 4. 初始化片内外设:
// 这个函数可以在DSP280x_CpuTimers.c源文件中找到
// InitCpuTimers(); // 这个例子仅初始化了Cpu定时器
// 步骤 5. 用户特定的代码
GpioDataRegs.GPBDAT.all =0x30000000;
GpioDataRegs.GPCDAT.all =0x00000007;
for(;;)
{
delay_loop();
GpioDataRegs.GPBTOGGLE.all =0x30000000;
GpioDataRegs.GPCTOGGLE.all =0x00000007;
delay_loop();
GpioDataRegs.GPBTOGGLE.all =0x30000000;
GpioDataRegs.GPCTOGGLE.all =0x00000007;
}
}
Q1: 做一件事情得有步骤,我用DSP去点灯,我需要哪几个步骤 ?
答:
(1)系统初始化 //这一步肯定得有, 具体怎么配置。参考上面代码 。
(2)配置GPIO //重点是讲GPIO配置,下面会详细展开怎么配置
(3)关闭中断 //参考代码里面,有关闭中断操作。至于为啥要关闭,我猜测是用不到就关闭吧!
(3)主函数调用 //学习单片机的都知道
Q2: 配置GPIO其实就相当于操作寄存器。 DSP有这么多寄存器 。应该操作哪些寄存器?
答:DSP的寄存器非常多,GPIO相关的寄存器也不少。这里我们只需要点灯。操作几个重点GPIO相关寄存器即可,其它的相关GPIO寄存器保持默认即可。具体步骤如下。
(1)根据上面的代码:
EALLOW;
GpioCtrlRegs.GPAMUX1.all = 0x00000000; // All GPIO
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF; // All outputs
EDIS;
GpioDataRegs.GPBTOGGLE.all
因此操作GPAMUX1、GPADIR、GPBTOGGLE三个寄存器即可 。
1.GPAMUX1: GPIO的多功能复用寄存器,这里点灯,写入00即可。
00:通用的输入输出口
01:外设选择1
10:外设选择2
11:外设选择3
2.GPADIR: GPIO方向寄存器,GPIO共58个,每个寄存器有两种状态。详见P146-P147
0:配置GPIO作为输入
1:配置GPIO作为输出
3.GPBTOGGLE:翻转寄存器 。例如 GPATOGGLE.GPIOx = 1:强制设置端口电平反转。详见:P153-P155
0:无效
1:有效