說明:下面的教程我是參考開發板提供的代碼例子
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:有效