本應(yīng)用筆記演示了MAXQ微控制器應(yīng)用開(kāi)發(fā)的簡(jiǎn)便性,并提供了IAR嵌入式工作臺(tái)?集成開(kāi)發(fā)環(huán)境和MAXQ?評(píng)估(EV)板。演示簡(jiǎn)單開(kāi)發(fā)過(guò)程的最簡(jiǎn)單方法是使用示例應(yīng)用程序。本應(yīng)用使用MAXQ2010 RISC微控制器上的UART、定時(shí)器和ADC來(lái)監(jiān)視和報(bào)告溫度。
應(yīng)用概述
本文描述的示例應(yīng)用使用MAXQ2010處理器和MAXQ2010評(píng)估(EV)板。本例展示了微控制器的UART、集成ADC控制器和器件定時(shí)器的用途。定時(shí)器用于每 500ms 生成一次中斷。MAXQ2010端口與ADC接口,用于數(shù)據(jù)采集。然后通過(guò)將熱敏電阻連接到MAXQ2010的ADC來(lái)獲取溫度讀數(shù)。當(dāng)發(fā)生中斷時(shí),MAXQ2010獲取溫度讀數(shù),并將結(jié)果輸出到其串行端口之一。
讀取 ADC 數(shù)據(jù)
在示例應(yīng)用中,ADC控制器讀取隨溫度變化的模擬輸入。在讀取任何輸入之前,應(yīng)用必須設(shè)置ADC的時(shí)鐘、轉(zhuǎn)換模式(單路或連續(xù))、基準(zhǔn)電壓源(內(nèi)部、外部或AVDD),以及感興趣源的輸入通道。需要初始化幾個(gè)寄存器才能實(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位將啟動(dòng)轉(zhuǎn)換。硬件通過(guò)清除相同的位來(lái)指示轉(zhuǎn)換完成。要讀取結(jié)果,請(qǐng)將ADST寄存器的ADIDX[3:0]位設(shè)置為目標(biāo)輸入通道。然后,ADDATA寄存器將保存相應(yīng)通道的數(shù)字?jǐn)?shù)據(jù)。在本示例應(yīng)用中,AN7 被分配給 ADC 數(shù)據(jù)緩沖器 7。因此,要讀取熱敏電阻數(shù)據(jù),請(qǐng)?jiān)O(shè)置 ADST = 0x07 并讀取 ADDATA。 對(duì)讀取的數(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; }
計(jì)算 AN7 處的模擬輸入,以伏特為單位,對(duì)應(yīng)于讀取的數(shù)字值。
計(jì)算與AN7處模擬輸入相對(duì)應(yīng)的熱敏電阻電阻。
以攝氏度為單位計(jì)算溫度。
寫(xiě)入串行端口
在示例應(yīng)用中,MAXQ2010的一個(gè)串行端口用于輸出當(dāng)前溫度讀數(shù)。在將任何數(shù)據(jù)寫(xiě)入端口之前,應(yīng)用程序必須設(shè)置波特率和串行端口模式。只需初始化幾個(gè)寄存器即可啟用串行端口通信。
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中,單個(gè)寄存器發(fā)送和接收串行數(shù)據(jù)。寫(xiě)入 SBUF0 寄存器將啟動(dòng)傳輸。當(dāng)串行端口上的數(shù)據(jù)可用時(shí),讀取 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; }
使用計(jì)時(shí)器生成周期性中斷
此示例應(yīng)用程序中使用的最后一個(gè)組件是 16 位計(jì)時(shí)器之一。定時(shí)器生成中斷,每秒觸發(fā)兩次溫度讀數(shù)。要為此示例配置計(jì)時(shí)器,程序員必須設(shè)置重新加載值,指定時(shí)鐘源,然后啟動(dòng)計(jì)時(shí)器。以下代碼顯示了初始化計(jì)時(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.
使用此計(jì)時(shí)器作為此示例的中斷源還需要執(zhí)行幾個(gè)步驟。MAXQ架構(gòu)的中斷必須在三個(gè)級(jí)別上啟用:全局、每個(gè)模塊和本地。使用 IAR? 編譯器,通過(guò)調(diào)用函數(shù)啟用全局中斷。此功能可有效設(shè)置中斷和控制 (IC) 寄存器的中斷全局使能 (IGE) 位。由于定時(shí)器B0位于模塊4中,因此設(shè)置中斷掩碼寄存器(IMR)的位4以啟用模塊的中斷。通過(guò)在定時(shí)器B控制寄存器(TB0CN)中設(shè)置啟用定時(shí)器B中斷(ETB)位來(lái)啟用本地中斷。這些步驟如下所示。 最后,使用中斷需要初始化中斷向量。IAR 的編譯器允許為每個(gè)模塊使用不同的中斷處理函數(shù)。為特定模塊設(shè)置中斷處理程序需要使用 #pragma 向量指令。中斷處理函數(shù)聲明前面還應(yīng)帶有 __interrupt 關(guān)鍵字。示例應(yīng)用程序通過(guò)以下方式聲明模塊 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評(píng)估板和IAR IDE設(shè)置
運(yùn)行示例應(yīng)用程序需要以下設(shè)置。
MAXQ2010評(píng)估板應(yīng)具有:
a. JU14 和 JU22 短路以啟用通道 AN7 上的熱敏電阻讀數(shù)。
b. JU9 引腳 2 和 3 短路以啟用 UART0。
c. JU8開(kāi)路,讓8MHz晶振源控制器。
IAR IDE 項(xiàng)目選項(xiàng)應(yīng)具有:
a. lnkmaxq2010.xcl 作為鏈接器命令文件(從“項(xiàng)目”菜單中選擇“選項(xiàng)”,然后從“類(lèi)別”列表中選擇“鏈接器”,然后選擇“配置”選項(xiàng)卡)。
b. maxq2010.ddf 作為設(shè)備描述文件(從“項(xiàng)目”菜單中選擇“選項(xiàng)”,然后從“類(lèi)別”列表中選擇“調(diào)試器”,然后選擇“設(shè)置”選項(xiàng)卡)。
c. JTAG作為驅(qū)動(dòng)程序(從“項(xiàng)目”菜單中選擇“選項(xiàng)”,然后從“類(lèi)別”列表中選擇“調(diào)試器”,然后選擇“設(shè)置”選項(xiàng)卡)。
d. COMx端口設(shè)置以與JTAG通信(從“項(xiàng)目”菜單中選擇“選項(xiàng)”,然后從“類(lèi)別”列表中選擇JTAG)。
電腦超級(jí)終端設(shè)置應(yīng)具有:
a. PC COMx端口,MAXQ0的UART2010連接到該端口。
二。配置屬性為 115200 波特率、8 個(gè)數(shù)據(jù)位、1 停止位以及無(wú)奇偶校驗(yàn)和流量控制。
該樣應(yīng)用使用MAXQ IAR嵌入式工作臺(tái)V2.12A進(jìn)行了測(cè)試。
圖 1
顯示了預(yù)期的輸出。
圖1.示例應(yīng)用程序輸出。
結(jié)論
如這些代碼示例所示,通過(guò)學(xué)習(xí)幾個(gè)外設(shè)寄存器的細(xì)節(jié),程序員能夠輕松開(kāi)發(fā)MAXQ2010微控制器和MAXQ系列處理器的應(yīng)用。IAR 嵌入式工作臺(tái)的添加允許使用符合 ANSI 標(biāo)準(zhǔn)的 C 代碼編寫(xiě)代碼,從而加快了開(kāi)發(fā)過(guò)程。在此處下載此示例應(yīng)用程序的完整源代碼。閱讀代碼開(kāi)頭的說(shuō)明和注釋,了解有關(guān)所需設(shè)置和 IAR 編譯器版本的詳細(xì)信息。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7792瀏覽量
153132 -
處理器
+關(guān)注
關(guān)注
68文章
19643瀏覽量
232438 -
寄存器
+關(guān)注
關(guān)注
31文章
5394瀏覽量
122435
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
MAXQ1850評(píng)估套件(EV kit)和面向MAXQ30的CrossWorks編譯器的設(shè)計(jì)方案
MAXQ2010 pdf datasheet (16-Bit
使用MAXQ2000評(píng)估板的應(yīng)用實(shí)例
MAXQ2010中文資料,pdf (16位混合信號(hào)微控制器 提供LCD接口)
MAXQ2010評(píng)估套件
MAXQ2010提供LCD驅(qū)動(dòng)器的16位混合信號(hào)微控制器
采用MAXQ2000 USB “拇指”評(píng)估套件進(jìn)行設(shè)計(jì)

MAXQ7665評(píng)估板快速入門(mén)

采用MAXQ2010的低功耗醫(yī)學(xué)數(shù)據(jù)記錄儀的設(shè)計(jì)

低功耗醫(yī)學(xué)數(shù)據(jù)記錄儀的設(shè)計(jì)

MAXQ610評(píng)估板中文資料

MAXQ2010-RFX+ MAXQ2010-RFX+ - (Maxim Integrated) - 嵌入式 - 微控制器

MAXQ2010-KIT# 評(píng)估板 - 嵌入式 - MCU,DSP

評(píng)論