并行模數(shù)轉(zhuǎn)換器ADS8364與TMS320F2812的接口設(shè)計
例如:extern void InitAdc(void); //初始化ADC函數(shù)
(2)命令文件(.CMD)的編寫:該文件中用到了兩個偽指令MEMORY和SECTIONS。
MEMORY偽指令用來標(biāo)示實際存在的目標(biāo)系統(tǒng)中可被使用的存儲器范圍。
SECTIONS偽指令用來定位一些代碼和數(shù)據(jù)塊。
部分代碼:
MEMORY
{
PAGE 0 : //聲明了片內(nèi)的存儲單元,包括起始地址和長度
PRAMH0 : origin = 0x3F8000, length = 0x001000
PAGE 1 :
RAMM0 : origin = 0x000000, length = 0x000400
……
}
SECTIONS
{ codestart : PRAMH0, PAGE = 0 /*定位代碼數(shù)據(jù)段*/
PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 /* 定位各外設(shè)的積存器結(jié)構(gòu)體 */
……
}
(3)主程序及中斷程序:
void main(void)
{ ……
InitSysCtrl(); //調(diào)用初始化系統(tǒng)控制函數(shù)
//該函數(shù)用于初始化系統(tǒng)控制寄存器、PLL、看門狗、時鐘
InitGpio(); //調(diào)用初始化GPIO函數(shù),用于選擇適當(dāng)?shù)腉PIO
ResetADS8364(); //復(fù)位ADS8364
……
DINT; // 禁止和清楚所有CPU中斷
IER = 0x0000; IFR = 0x0000;
InitPieCtrl(); // 初始化Pie控制寄存器為默認(rèn)值
InitPieVectTable(); // 初始化中斷向量表
……
EINT; // 使能全局中斷 INTM
PWM(); //開啟轉(zhuǎn)換時鐘
while(1) // 循環(huán),根據(jù)條件讀數(shù)并產(chǎn)生中斷
{……}
}
void read_ADD() //該函數(shù)讀取采集的數(shù)據(jù)
{ //根據(jù)通道讀取數(shù)據(jù)
if (ADD_Mode){ADC_address[0] = (*ptrCHA0);}
……
if (ADD_Mode){ADC_address[5] = (*ptrCHC1);}
CHC1_Data[idx] = *ptrCHC1;
}
5 結(jié)束語
本文以ADS8364模數(shù)轉(zhuǎn)換芯片為基礎(chǔ),詳細(xì)討論了ADS8364和TMS320F2812的接口設(shè)計和工作原理,重點介紹了TMS320F2812控制芯片的最小系統(tǒng)設(shè)計、ADS8364和TMS320F2812的連接、初始化程序等三部分內(nèi)容。該設(shè)計方案在電機控制、多軸定位系統(tǒng)、多通道數(shù)據(jù)采集等場合有著廣泛的應(yīng)用。
評論