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

2013年8月21日 星期三

[ Android CAR ] CAN 微控器內部結構

CAN 微控器內部結構如下圖:
CAN核心(CAN Core):包括CAN協定控制器及Rx/Tx 位移暫存器。
Message RAM:儲存CAN訊息物件及代碼遮罩。
Message Handler:處理CAN訊息並產生中斷訊息。

2013年8月16日 星期五

[ Android CAR ] 淺談數位輸出控制

車身電子網路模擬模組提供了4顆LED,如下圖:

這是4顆LED採用共陽極接上正電源,負極當成控制點,因此接地時為亮,否則不亮,分別接至P:3.0~P3.4。
因此在程式中,我們使用SFR巨集指令。
SBIT (LED1, SFR_P3, 0);      // LED='0'表示亮 ,led1燈負極接至P3.0
SBIT (LED2, SFR_P3, 1);      // LED='0'表示亮 ,led2燈負極接至P3.1
SBIT (LED3, SFR_P3, 2);      // LED='0'表示亮 ,led3燈負極接至P3.2
SBIT (LED4, SFR_P3, 3);      // LED='0'表示亮 ,led4燈負極接至P3.3

在使用LED1~LED4來開關LED時,要先做埠的初始化:
SFRPAGE = ACTIVE_PAGE;  // 選擇SFR的地址為主動暫存器頁
PCA0MD &= ~0x40;                // 禁止看門狗
SFRPAGE = CONFIG_PAGE;
    P3MDOUT |= 0x0F;                    // 將P3.0~P3.3設定成輸出
    P3SKIP  |= 0x0F;                    // P3.0~P3.3設定成跳過交叉開關
    XBR2     = 0x40;                    // 啟動交叉開關
    SFRPAGE = ACTIVE_PAGE;    // 選擇SFR的地址為主動暫存器頁



完整程式列表如下:















執行結果如下:



[ Android CAR ] 特殊功能暫存器分頁概念

一般計算機結構常見在記憶體及輸出入埠,記憶體用來儲存資料或程式碼,而輸出入埠則用來連接硬體設備,然而不管是記憶體或是輸出入埠都需要編位址,用位址來存取內容。若把記憶體及輸出入埠分開編位址,我們稱為Port Mapped I/O,若是合在一起則稱讚Memory Mapped I/O,可以參考維基百科上的暫存器映射輸出輸入的。典型Port Mapped I/O電腦結構就是x86系統;大部份微處理機和8051微處理器是採用Memory Mapped I/O,採用Memory Mapped I/O,會把輸出入埠及記憶體一起編位址,以8051為例暫存器有256個,從00H~FFH,而00H~7FH是屬於一般用途暫存器,80H~FFH則是屬於特殊功能暫存器,簡稱SFR。
對於C8051F500微處理機,是以8051為核心,擴充許多硬體,包括:看門狗、ADC、DAC、電壓比較器、電壓基準、計時器、PWM、溫度感知器、UART、SPI、SMBUS、CAN、LIN、USB等。因此80H~FFH空間不夠使用,所以採用分頁來處理,C8051F500微處理機把SFR分成三頁,利用特殊功能暫存器頁面選擇暫存器(Special Function Register Page Selection register, SFRPAGE),把內容設定成0x0, 0xC, and 0xF就能選擇,所以要操作特殊功能暫存器,就必須先設定特殊功能暫存器頁面選擇暫存器的內容,再利用MOV指令來直接存取。
在C8051F500_defs.h標頭檔的最後面,有定義特殊功能暫存器的頁面:
//-----------------------------------------------------------------------------
// SFR Page Definitions
//-----------------------------------------------------------------------------

#define  CONFIG_PAGE       0x0F        // System and Port Configuration Page
#define  ACTIVE_PAGE       0x00        // Active Use Page
#define  CAN0_PAGE         0x0C        // CAN0 Registers

在程式中就可以使用下列命令來存取主動頁面
SFRPAGE = ACTIVE_PAGE;
來存取設定配置面頁暫存器
SFRPAGE = CONFIG_PAGE;
來存取設定CAN面頁暫存器
SFRPAGE =  CAN0_PAGE;




[ Android CAR ] C8051F500程式燒錄

參考畫

工具:Silicon Laboratories Flash Utility
啟動後的畫面

選擇Connect/Disconnect頁籤,在Debug Interface選擇 C2,C2是Silicon公司制定的2線式通訊協定,JTAG則是由聯合測試工作群組所制定的規範。
點擊Connect按鈕,結果如下圖:
觀察結果忘了打開開源

 打開電源
再按一下Connect按鈕,成功連線如下圖:
 再來選擇Dowload Hex File/Go/Stop頁籤,按下Browse鈕,選取要燒錄的程式,本實驗選擇Timer0_LED實驗,透過計時器來控制LED的明亮/熄掉。
 選擇Erase all Code Space before download,再按下Download鍵。
 燒錄完成
在左側有個LED,目前狀態全熄
全亮