zoukankan      html  css  js  c++  java
  • 合泰单片机使用总结

    之前一直用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;
    }
  • 相关阅读:
    atitit.ntfs ext 文件系统新特性对比
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.图片木马的原理与防范 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.jdk java8的语法特性详解 attilax 总结
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit.远程接口 监控与木马   常用的api 标准化v2 q216
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit..jdk java 各版本新特性 1.0 1.1 1.2 1.3 1.4 1.5(5.0) 1.6(6.0) 7.0 8.0 9.0 attilax 大总结
    Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216  java c# php js.docx
  • 原文地址:https://www.cnblogs.com/liujiangyi/p/9076900.html
Copyright © 2011-2022 走看看