一、承上啟下 在上一篇文章《Zigbee之旅(一):開(kāi)天辟地》中,我們簡(jiǎn)要的介紹了Zigbee,以及其開(kāi)發(fā)環(huán)境的搭建。OK,現(xiàn)在工具都齊全了,一個(gè)問(wèn)題隨之產(chǎn)生:如何利用這些軟、硬件來(lái)編寫(xiě)一個(gè)能夠跑起來(lái)的程序呢? 本篇文章基本是來(lái)回答以上問(wèn)題的:以“LED燈閃爍”這個(gè)小實(shí)驗(yàn)作為例子,介紹如何配置IAR以適合開(kāi)發(fā)基于CC2430的程序,如何運(yùn)用 IAR 編寫(xiě)并在線調(diào)試程序。 二、IAR的配置 IAR是一個(gè)強(qiáng)大的嵌入式開(kāi)發(fā)平臺(tái),支持非常多種類的芯片。IAR中的每一個(gè)Project,都可以擁有自己的配置,具體包括Device類型、堆/棧、Linker、Debugger等。 (1)新建 Workspace 和 Project 首先新建文件夾 ledtest。打開(kāi)IAR,選擇主菜單File -> New -> Workspace建立新的工作區(qū)域。 選擇Project -> Create New Project -> Empty Project,點(diǎn)擊OK,把此工程文件保存到文件夾 ledtest 中,命名為:ledtest.ewp(如下圖)。 (2)配置General Options Target設(shè)置:Device:CC2430; Code Mode:Near; Data model:Large; Calling convention:XDATA stack reetrant Data pointer設(shè)置:Number of DPTRs:1 Stack/Heap設(shè)置:XDATA stack size:0x1FF (3)Linker設(shè)置 Linker command file:選擇lnk51ew_cc2430.xcl (4)Debugger設(shè)置: Driver:Texas Instruments (本實(shí)驗(yàn)為真機(jī)調(diào)試,所以選擇TI;若其他程序要使用IAR仿真器,可選Simulator)
Device Description file:CC2430.ddf 至此,針對(duì)本實(shí)驗(yàn)的IAR配置基本結(jié)束,下面來(lái)介紹其編碼實(shí)現(xiàn)。 三、程序代碼的編寫(xiě)(1)新建程序文件 選擇File->New->File,新建文件main.c。 (2)引入頭文件 基于CC2430的程序,必須包含對(duì)ioCC2430.h的引用,此文件定義了CC2430的各類特殊功能寄存器(SFR)的地址映射。 #include <ioCC2430.h> //引入CC2430所對(duì)應(yīng)的頭文件(包含各SFR的定義)
此文件內(nèi)置于IAR中(類似于stdio.h),將鼠標(biāo)至于此行代碼上,右鍵,選擇 OPen "ioCC2430.h" ,即可看到此頭文件的全部?jī)?nèi)容。 (3)定義LED引腳 查看開(kāi)發(fā)板電路圖,如下所示: 可知led1~4分別受引腳P1_0~P4_0的控制,因此可以定義 led1、led2、led3、led4 分別為引腳 P1_0、P2_0、P3_0、P4_0。 #define led1 P1_0 //定義LED1為P1_0口控制
#define led2 P1_1 //定義LED2為P1_1口控制
#define led3 P1_2 //定義LED3為P1_2口控制
#define led4 P1_3 //定義LED4為P1_3口控制
(4)main函數(shù) 接下來(lái),開(kāi)始編寫(xiě)main函數(shù)。 首先,在使用P1.0~P1.4端口前,需對(duì)其工作方式以及輸入/輸出方向進(jìn)行設(shè)置,其中涉及到兩個(gè)SFR:P1SEL、P1DIR。 P1SEL = 0x00; //設(shè)置P1為普通 I/O 口
P1DIR |= 0x0F; //設(shè)置P1.0 P1.1 P1.2 P1.3 為輸出
Zigbee 小貼士
CC2430具有 P0_0 ~ P0_7 , P1_0~P1_7 , P2_0~P2_7 共21個(gè)I/O口。它們可作為通用數(shù)字I/O,也可用于連接ADC、定時(shí)/計(jì)數(shù)器或USART等外設(shè)IO。
CC2430的SFR中有三類寄存器可用于配置這些IO口:
①PxSEL(x為0/1/2):P0/P1/P2口功能選擇
0:通用數(shù)字IO,1:外設(shè)IO,缺省默認(rèn)為0
②PxDIR(x為0/1/2):P0/P1/P2口方向
0:輸入,1:輸出,缺省默認(rèn)為0
③PxINP(x為0/1):P0/P1口輸入模式
0:上拉/下拉,1:三態(tài),缺省默認(rèn)為0
在使用IO口時(shí)需配置,若缺省,則取系統(tǒng)默認(rèn)值。
然后初始化4個(gè)LED燈,設(shè)為全滅: led1 = 1;
led2 = 1;
led3 = 1;
led4 = 1;
最后,編寫(xiě)LED燈閃爍效果代碼: led1 = 0; //led1閃爍
Delay(10);
led1 = 1;
Delay(10);
led2 = 0; //led2閃爍
Delay(10);
led2 = 1;
Delay(10);
led3 = 0; //led3閃爍
Delay(10);
led3 = 1;
Delay(10);
led4 = 0; //led4閃爍
Delay(10);
led4 = 1;
Delay(10);
其中涉及到一個(gè)延時(shí)子函數(shù)Delay(unsigned char n): void Delay(unsigned char n) {
unsigned char i;
unsigned int j;
for(i = 0; i < n; i++)
for(j = 1; j; j++)
;
}
(5)代碼總覽 將上述代碼合并為一個(gè)整體,如下所示: //引入頭文件
#include <ioCC2430.h> //引入CC2430所對(duì)應(yīng)的頭文件(包含各SFR的定義)
//定義LED引腳
#define led1 P1_0 //定義LED1為P1_0口控制
#define led2 P1_1 //定義LED2為P1_1口控制
#define led3 P1_2 //定義LED3為P1_2口控制
#define led4 P1_3 //定義LED4為P1_3口控制 //延時(shí)子程序
void Delay(unsigned char n) {
unsigned char i;
unsigned int j;
for(i = 0; i < n; i++)
for(j = 1; j; j++)
;
}
void main(void)
{
P1SEL = 0x00; //設(shè)置P1為普通 I/O 口
P1DIR |= 0x0F; //設(shè)置P1.0 P1.1 P1.2 P1.3 為輸出
led1 = 1; //初始化,4個(gè)led燈全熄
led2 = 1;
led3 = 1;
led4 = 1;
while(1) //開(kāi)始循環(huán)
{
led1 = 0; //led1閃爍
Delay(10);
led1 = 1;
Delay(10);
led2 = 0; //led2閃爍
Delay(10);
led2 = 1;
Delay(10);
led3 = 0; //led3閃爍
Delay(10);
led3 = 1;
Delay(10);
led4 = 0; //led4閃爍
Delay(10);
led4 = 1;
Delay(10);
}
}
OK,這個(gè)小實(shí)驗(yàn)的代碼就編寫(xiě)好了,是不是很簡(jiǎn)單啊,呵呵~ 四、編譯及調(diào)試 選擇Project -> Make,編譯代碼,若成功,則會(huì)出現(xiàn)以下輸出: 按 Zigbee開(kāi)發(fā)板 → 調(diào)試器 → PC的USB接口 的順序連接Zigbee設(shè)備,然后選擇Project -> Debug,程序就會(huì)被自動(dòng)下載到開(kāi)發(fā)板中。 然后選擇 Debug -> Go,即可啟動(dòng)程序,這時(shí),你就會(huì)看到4個(gè)LED燈依次閃爍了!雖然這是一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的小實(shí)驗(yàn),但是當(dāng)筆者成功實(shí)現(xiàn)它的時(shí)候,還是小小的興奮了一把~呵呵! 五、結(jié)語(yǔ) 本文以“LED燈閃爍實(shí)驗(yàn)”為基礎(chǔ),分別從IAR的配置、程序代碼的編寫(xiě),以及編譯及調(diào)試的過(guò)程介紹了整個(gè)實(shí)現(xiàn)過(guò)程。接下來(lái)的一篇,則會(huì)在了解了開(kāi)發(fā)程序的基本過(guò)程的基礎(chǔ)上,介紹幾個(gè)CC2430開(kāi)發(fā)的基礎(chǔ)實(shí)驗(yàn),涉及定時(shí)器、串口通信、AD轉(zhuǎn)換、系統(tǒng)睡眠以及看門(mén)狗 等,敬請(qǐng)期待
|