合泰單片機使用總結


之前一直用ARM 系列的單片機,現在因為產品需要,用了一款合泰單片機(HT67F2360),整個開發過程中發現還是有很多差異。

一、開發環境中的一些差異#

arm 系列單片機,直接用keil 接 選用的芯片就可以編譯,調試,燒錄。而這款合泰單片機,ht-ide 是不能直接燒錄芯片的,ht-ide 只能將程序燒錄到專門的仿真開發板中,仿真開發板有兩個板子,母板加子板,不同系列的單片機,選用不同的子板仿真。悲劇>的是,我沒有開發仿真板。程序調通了,要通過官方的提供的燒錄工具hope3000 for e-link,將mtp文件燒錄到具體的芯片中。找了好久沒找到hope3000的命令行工具,每次燒錄,都要點擊好幾次鼠標:選擇文件,選擇電壓,下載,效率不太高。

二、編譯器,連接器的一些差異

  • HIT-IDE 的編譯器有三個版本分別是V1,V2,V3。這三個版本的區別,不僅僅是性能上的差異,還有很多語言支持上的差異。
  • 三個版本的編譯器,C語言的基本數據類型的Size(bit)互相之間會有不一致。並且無論哪個版本跟ANSI C都不完全一致。
  • 對中斷函數的支持的差異。V1 不支持中斷處理函數調用函數。V2,V3支持中斷處理函數調用函數,但是被調用的函數必須定義為#pragma nolocal ,並且中斷調用的函數不能和main 中調用同一個函數,中斷之間也不能調用同一個函數(包括間接調用),否則會造成RAM 空間重疊使用。
  • V1 V2不支持靜態變量,V3支持。
  • 默認情況下,未初始化的全局變量不初始化為0。如果需要,要在工程編譯選項中勾選。
  • 默認情況下,enum 類型的不是byte。

三、存儲器和間接尋址

  • 這款單片機,沒有一個統一的虛擬地址空間用來表示所有的存儲器地址。
  • 存儲器包括:Flash 程序存儲器,數據存儲器,特殊功能寄存器,EEPROM 數據存儲器。
  • 數據存儲器被分為若干個Sector,操作不同的數據存儲器,要切換到不同的Sector。
    1. 例如LCD 存儲器地址位於Sector 4中,要操作LCD 存儲器,要先切換Sector,然后通過間接尋址方式操作存儲單元。
  • EEPROM 數據存儲器獨立於程序存儲器和數據存儲器,不能像其他類型的存儲器一樣尋址。
    1. 地址寄存器EEA , 數據寄存器EED,控制寄存器EEC 三個寄存器用來控制內部EEPROM 數據存儲器的操作。
    2. EEA 和EED 位於Sector 中,可以直接訪問。而EEC位於Sector1中,要通過間接的方式訪問。

四、示例代碼#

LCD 存儲器寫操作 example

void lcd_write_mem(uint8_t addr,uint8_t val)
{
	_mp1h = 0x04;    //sector
	_mp1l = addr;
	_iar1 = val;
	_mp1h = 0x00;
}

EEPROM 存儲器操作接口 example:

uint8_t eeprom_read_byte(uint8_t addr)
{
    uint16_t i = 0;
    //間接訪問_eec
    _mp1l = 0x40;
    _mp1h = 0x01;
 
    _eea = addr;
 
    _iar1 |= 0x02;  // _rden = 1;
    _iar1 |= 0x01; //  _rd = 1
    _emi = 1;
 
 
    while ( (_iar1 & 0x01) && (i++ < 1000))
    GCC_DELAY(100);
    _iar1 &= 0xFD;
 
    _mp1l = 0x00;
    _mp1h = 0;
    return _eed;
}

void eeprom_write_byte(uint8_t addr,uint8_t data)
{
   uint16_t i = 0;
 
    _emi = 0;
 
    //間接訪問_eec
    _mp1l = 0x40;
    _mp1h = 0x01;
 
    _eea = addr;
 
 
    //_eea = addr;
    _eed = data;
    _iar1 |= 0x08;  // _wren = 1;
    _iar1 |= 0x04; //  _wr = 1
    _emi = 1;
 
    // wait _wr
    while ( (_iar1 & 0x04) && (i++ < 1000))
    GCC_DELAY(100);
 
    _mp1l = 0x00;
    _mp1h = 0;
    _iar1 &= 0x7; //_wren = 0
    _emi = 1;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM