本應(yīng)用筆記演示了MAXQ微控制器應(yīng)用開發(fā)的簡便性,并提供了IAR嵌入式工作臺?集成開發(fā)環(huán)境和MAXQ?評估(EV)板。演示簡單開發(fā)過程的最簡單方法是使用示例應(yīng)用程序。本應(yīng)用使用MAXQ2010 RISC微控制器上的UART、定時器和ADC來監(jiān)視和報告溫度。
應(yīng)用概述
本文描述的示例應(yīng)用使用MAXQ2010處理器和MAXQ2010評估(EV)板。本例展示了微控制器的UART、集成ADC控制器和器件定時器的用途。定時器用于每 500ms 生成一次中斷。MAXQ2010端口與ADC接口,用于數(shù)據(jù)采集。然后通過將熱敏電阻連接到MAXQ2010的ADC來獲取溫度讀數(shù)。當(dāng)發(fā)生中斷時,MAXQ2010獲取溫度讀數(shù),并將結(jié)果輸出到其串行端口之一。
讀取 ADC 數(shù)據(jù)
在示例應(yīng)用中,ADC控制器讀取隨溫度變化的模擬輸入。在讀取任何輸入之前,應(yīng)用必須設(shè)置ADC的時鐘、轉(zhuǎn)換模式(單路或連續(xù))、基準(zhǔn)電壓源(內(nèi)部、外部或AVDD),以及感興趣源的輸入通道。需要初始化幾個寄存器才能實(shí)現(xiàn)ADC轉(zhuǎn)換。
void initADC ( ) { ADCN = 0x00; // Single conversion, external AVDD reference, divide-by-1 clock frequency. ADST = 0x10; //Select configuration register - read/write access on ADDATA. ADDATA = 0x00; //Channel 0 for AN0. ADDATA = 0x01; //Channel 0 for AN1. ADDATA = 0x02; //Channel 0 for AN2. ADDATA = 0x03; //Channel 0 for AN3. ADDATA = 0x04; //Channel 0 for AN4. ADDATA = 0x05; //Channel 0 for AN5. ADDATA = 0x06; //Channel 0 for AN6. ADDATA = 0x07; //Channel 0 for AN7, thermistor is attached on this channel. ADADDR = 0x07; //Selecting 0x07 as the last conversion configuration register. }
初始化后,設(shè)置ADST寄存器的ADCONV位將啟動轉(zhuǎn)換。硬件通過清除相同的位來指示轉(zhuǎn)換完成。要讀取結(jié)果,請將ADST寄存器的ADIDX[3:0]位設(shè)置為目標(biāo)輸入通道。然后,ADDATA寄存器將保存相應(yīng)通道的數(shù)字?jǐn)?shù)據(jù)。在本示例應(yīng)用中,AN7 被分配給 ADC 數(shù)據(jù)緩沖器 7。因此,要讀取熱敏電阻數(shù)據(jù),請設(shè)置 ADST = 0x07 并讀取 ADDATA。 對讀取的數(shù)字值執(zhí)行以下步驟以達(dá)到溫度:
unsigned int getADCReading() { unsigned short data = 0; ADST_bit.ADCONV = 1; //Enable conversion. while( ADST_bit.ADCONV == 0x01 ); //ADST.ADCONV bit indicates conversion in progress. ADST = 0x07; //We are interested in reading only the AN7 input, that is thermistor data. data = ADDATA; //Read AN7 data. return data; }
計算 AN7 處的模擬輸入,以伏特為單位,對應(yīng)于讀取的數(shù)字值。
計算與AN7處模擬輸入相對應(yīng)的熱敏電阻電阻。
以攝氏度為單位計算溫度。
寫入串行端口
在示例應(yīng)用中,MAXQ2010的一個串行端口用于輸出當(dāng)前溫度讀數(shù)。在將任何數(shù)據(jù)寫入端口之前,應(yīng)用程序必須設(shè)置波特率和串行端口模式。只需初始化幾個寄存器即可啟用串行端口通信。
void initSerial() { SCON0_bit.SM1 = 1; // Set to Mode 1. SCON0_bit.REN = 1; // Enable receives. SMD0_bit.SMOD = 1; // Set baud rate to 16 times the baud clock. PR0 = 0x75F7; // Set phase for 115200 with an 8MHz crystal. SCON0_bit.TI = 0; // Clear the transmit flag. SBUF0 = 0x0D; // Send carriage return to start communication. }
在UART中,單個寄存器發(fā)送和接收串行數(shù)據(jù)。寫入 SBUF0 寄存器將啟動傳輸。當(dāng)串行端口上的數(shù)據(jù)可用時,讀取 SBUF0 寄存器將檢索輸入。 示例程序使用以下函數(shù)將數(shù)據(jù)輸出到串行端口。
int putchar(int ch) { while(SCON0_bit.TI == 0); // Wait until we can send. SCON0_bit.TI = 0; // Clear the sent flag. SBUF0 = ch; // Send the char. return ch; }
使用計時器生成周期性中斷
此示例應(yīng)用程序中使用的最后一個組件是 16 位計時器之一。定時器生成中斷,每秒觸發(fā)兩次溫度讀數(shù)。要為此示例配置計時器,程序員必須設(shè)置重新加載值,指定時鐘源,然后啟動計時器。以下代碼顯示了初始化計時器 B 所需的步驟。
TB0V = 0x00000; // Set current timer value. TB0R = 0x0F42; // Set reload value. TB0CN = 0x0506; // Set Timer Clock = SysClk/1024, Reload Timer Mode, Interrupt Enabled.
使用此計時器作為此示例的中斷源還需要執(zhí)行幾個步驟。MAXQ架構(gòu)的中斷必須在三個級別上啟用:全局、每個模塊和本地。使用 IAR? 編譯器,通過調(diào)用函數(shù)啟用全局中斷。此功能可有效設(shè)置中斷和控制 (IC) 寄存器的中斷全局使能 (IGE) 位。由于定時器B0位于模塊4中,因此設(shè)置中斷掩碼寄存器(IMR)的位4以啟用模塊的中斷。通過在定時器B控制寄存器(TB0CN)中設(shè)置啟用定時器B中斷(ETB)位來啟用本地中斷。這些步驟如下所示。 最后,使用中斷需要初始化中斷向量。IAR 的編譯器允許為每個模塊使用不同的中斷處理函數(shù)。為特定模塊設(shè)置中斷處理程序需要使用 #pragma 向量指令。中斷處理函數(shù)聲明前面還應(yīng)帶有 __interrupt 關(guān)鍵字。示例應(yīng)用程序通過以下方式聲明模塊 4 的中斷處理程序。
__enable_interrupt() TB0CN = 0x506; // Enable interrupts along with setting Timer Clock and run Timer. IMR |= 0x10; // Enable the interrupts for module 4.
#pragma vector = 4 __interrupt void timerInterrupt() { // Add interrupt handler here. }
MAXQ2010評估板和IAR IDE設(shè)置
運(yùn)行示例應(yīng)用程序需要以下設(shè)置。
MAXQ2010評估板應(yīng)具有:
a. JU14 和 JU22 短路以啟用通道 AN7 上的熱敏電阻讀數(shù)。
b. JU9 引腳 2 和 3 短路以啟用 UART0。
c. JU8開路,讓8MHz晶振源控制器。
IAR IDE 項目選項應(yīng)具有:
a. lnkmaxq2010.xcl 作為鏈接器命令文件(從“項目”菜單中選擇“選項”,然后從“類別”列表中選擇“鏈接器”,然后選擇“配置”選項卡)。
b. maxq2010.ddf 作為設(shè)備描述文件(從“項目”菜單中選擇“選項”,然后從“類別”列表中選擇“調(diào)試器”,然后選擇“設(shè)置”選項卡)。
c. JTAG作為驅(qū)動程序(從“項目”菜單中選擇“選項”,然后從“類別”列表中選擇“調(diào)試器”,然后選擇“設(shè)置”選項卡)。
d. COMx端口設(shè)置以與JTAG通信(從“項目”菜單中選擇“選項”,然后從“類別”列表中選擇JTAG)。
電腦超級終端設(shè)置應(yīng)具有:
a. PC COMx端口,MAXQ0的UART2010連接到該端口。
二。配置屬性為 115200 波特率、8 個數(shù)據(jù)位、1 停止位以及無奇偶校驗(yàn)和流量控制。
該樣應(yīng)用使用MAXQ IAR嵌入式工作臺V2.12A進(jìn)行了測試。
圖 1
顯示了預(yù)期的輸出。
圖1.示例應(yīng)用程序輸出。
結(jié)論
如這些代碼示例所示,通過學(xué)習(xí)幾個外設(shè)寄存器的細(xì)節(jié),程序員能夠輕松開發(fā)MAXQ2010微控制器和MAXQ系列處理器的應(yīng)用。IAR 嵌入式工作臺的添加允許使用符合 ANSI 標(biāo)準(zhǔn)的 C 代碼編寫代碼,從而加快了開發(fā)過程。在此處下載此示例應(yīng)用程序的完整源代碼。閱讀代碼開頭的說明和注釋,了解有關(guān)所需設(shè)置和 IAR 編譯器版本的詳細(xì)信息。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151423 -
處理器
+關(guān)注
關(guān)注
68文章
19286瀏覽量
229842 -
寄存器
+關(guān)注
關(guān)注
31文章
5343瀏覽量
120368
發(fā)布評論請先 登錄
相關(guān)推薦
評論