顯示具有 zigbee 標籤的文章。 顯示所有文章
顯示具有 zigbee 標籤的文章。 顯示所有文章

CC2430 ZStack的Uart使用方法

1.首先要知道CC2430Uart的接腳在哪裡
在CC2430的datasheet裡有一張表有寫(p. 80)
這樣看起來Uart有兩個
且都有兩種接腳的方式
Uart0分別是P0.3 P0.2或是P1.5 P1.4
Uart1分別是P0.5 P0.4或是P1.7 P1.6

2.要如何設定
在datasheet有寫(p.83)
將PERCFG(reg中的0xF1)中的bit0設為0就是Uart0腳位為P0.3 P0.2
將PERCFG(reg中的0xF1)中的bit0設為1就是Uart0腳位為P1.5 P1.4
將PERCFG(reg中的0xF1)中的bit1設為0就是Uart1腳位為P0.5 P0.4
將PERCFG(reg中的0xF1)中的bit1設為1就是Uart1腳位為P1.7 P1.6

3.接下來就要將I/O的Port設定
在datasheet有寫(p.83)
也就是說假設你需要使用Uart0中的Alt.1
就要這樣寫
PERCFG &= 0xFE;
P0SEL |= 0x0C;
這樣P0.3 P0.2就會變成Uart0的Tx Rx

4.接下來就要找ZStack的程式如何啟動
ZStack將一些硬體部分寫在以下的預設路徑
C:\Texas Instruments\ZStack-1.4.3\Components\hal\target\
我所要使用的是CC2430EB所以就看CC2430EB裡面的東西
裡面有hal_uart.c這個檔案
裡面寫的很完整所以幾乎不需要修改它
不過要知道裡面的函數名稱
因為要使用Uart就要使用裡面的函數
在開頭的define有寫到開啟Uart的參數HAL_UART
可以自行開啟
或是在hal_board_cfg.h有寫到(hal_board_cfg.h第239行)
沒設定的話它會先看ZAPP_P1、ZAPP_P2、ZTOOL_P1或是ZTOOL_P2有沒有設定
有的話就開啟
在hal_board_cfg.h第247行寫到要開啟那個Uart
預設只有開啟Uart0
而且在hal_uart.c寫到他Uart0預設是用P0.3 P0.2(hal_uart.c第451行)
Uart1預設是用P1.7 P1.6(hal_uart.c第468行)

5.接下來就開始使用它
開啟預設的IAR
C:\Texas Instruments\ZStack-1.4.3\Projects\zstack\Samples\SampleApp\CC2430DB\SampleApp.eww
在Project→Options→C/C++ Compiler→Preprocessor→Defined symbols
可以下達設定
裡面預設有ZTOOL_P1所以因該有開啟Uart
但是他不會去執行到ISR的UART
而且它會顯示出它內部有寫好的一些字串
所以需要修改
刪除
ZTOOL_P1
加上
HAL_UART

HAL_UART_ISR
接下來開啟
SampleAppHw.c
將第92行刪除或是註解
#error The UART will not work with this configuration. The RX & TX pins are used.
上面這一行是說
因為之前設定ZTOOL_P1 所以RX TX已經被用了
但是我將它取消所以是不會被抵觸的

6.接下來就開始寫程式
開啟SampleApp.c裡面
就是已經寫好的程式
SampleApp_Init->程式初始值
SampleApp_ProcessEvent ->程式的事件(程式撰寫的地方)
所以在SampleApp.c前面加上
hal_uart.c
void rx_function (uint8 port,uint8 event); 
在SampleApp_Init裡面加上
halUARTCfg_t uartConfig;

uartConfig.configured           = TRUE;  // 2430 don't care.
uartConfig.baudRate             = HAL_UART_BR_38400;
uartConfig.flowControl          = TRUE;
uartConfig.flowControlThreshold = 48;  //接收緩衝區
uartConfig.rx.maxBufSize        = 64;
uartConfig.tx.maxBufSize        = 64;
uartConfig.idleTimeout          = 6;  // 2430 don't care.
uartConfig.intEnable            = TRUE;  // 2430 don't care.
uartConfig.callBackFunc         = rx_function; //接收的function名稱

HalUARTInit();

HalUARTOpen(HAL_UART_PORT_0, &uartConfig);

在最後面加上
void rx_function(uint8 port,uint8 event)
{
  uint8 temp[8];
  HalUARTRead(HAL_UART_PORT_0,temp,8);
  HalUARTWrite(HAL_UART_PORT_0,temp, 8);
} 


7.baudRate
不知道原因
在CC2430的Zstack
它只支援34800和115200這兩種baudRate
所以就只設定這兩種
接下來可以去看它是設定
是否有同位檢查
是否為8bit或是9bi
Endbit是1個還是2個
需不需要硬體控置流量
在cc2430的datasheet裡面有寫
可以控制的方式和bits
在zstack裡的hal_uart.c的第641行
它預設是8bit,沒有同位檢查,1bit停止碼,有硬體控制流量

8.接下來就可以編輯且開啟超級終端機來測試

TI Zigbee 環境建置 CC2430

1.首先先到TI官網下載ZStack的安裝套件
按此連結
找到CC2430的ZStack
我撰寫此文章時檔案名稱是
swrc072c.zip
內附ZStack和範例程式

2.安裝IAR for 8051
一定是要8051的
而且要7.30B以上的版本才行
但是我安裝7.51A編譯不過
也不知道是什麼原因
也許是因為用謎之方法沒過
因為網路上說7.50A的產生器可以用在7.51A
可以安裝但是不知道有沒有破解完成
所以我灌7.50A
編譯有成功

3.接下來接上CC2430的版子
會顯示要安裝驅動程式
驅動程式放在IAR裡面
預設存放路徑為
C:\Proram Files\IAR Systems\Embedded Workbench 5.0\8051\drivers\Chipcon


4.開啟Sample的專案
預設路徑為
C:\Texas Instruments\ZStack-1.4.3\Projects\zstack\Samples\Location\CC2430DB\SampleApp.eww

應該會出現This project file'SampleApp.eww' is in an old format......
這是正常的吧!!
因為當初TI在開發的時候因該是用IAR for 8051 v7.30B
所以按是

5.將專案選擇CoordinatorDB
點取Make
成功的話
因該會出現errors為0
按下Debug的按鈕
它就會自動燒入
再按下GO就會跑程式