最近刚做完一个项目,刚好用到了国产芯片中颖的SH79F166A,由于是第一次用到这款芯片,很多细节不是很清楚,其中也踩过很多坑,在这里拿出来分享给大家,希望对同样用到这款芯片的朋友遇到相似的问题有所帮助,同时也是对这段时间的一个学习总结吧,这也是我写博客的初衷!
在这里我不过多的讲解做项目的细节,主要谈谈在使用这款芯片我踩到的一些“坑”。
首先,看过这款芯片数据手册的朋友,如果仔细一点的话,肯定会发现,寄存器的地址分为两个区,bank0区和bank1区,大部分寄存器存放在bank0区,少部分在bank1区,但是它们存在地址重复的现象,比如你要使用bank1区E1H地址P5,如果此时指针指向的是bank0区,那么你实际使用的是P0,因为它的地址也是E1H;
所以我们每次写寄存器的时候都应该先指向相应的bank区,尤其是中断服务函数里面在进入中断之前先保存好bank区值,在退出中断时恢复bank区值,否则会导致错误。当然细心的朋友肯定会发先有些寄存器没有标明在那个区,那么这时bank区对这类寄存器没影响,INSCON寄存器可以用来更改bank区。
接下来谈谈该款芯片的类eeprom,之所以叫“类”eeprom,那它肯定不是真正的eeprom,事实也是如此,本芯片带有1k的类eeprom存储空间,分四个区,每个区256个字节,谨记,在操作,写入数据时必须先擦除该区的内容,这也许是它和真正的eeprom最大的区别吧,读数据没有此要求,在写入数据过程中记得关中断,防止被打断,操作流程严格按照手册说明即可;
最后,谈一下系统时钟配置问题,芯片的系统时钟选择通过代码选项来设置,还有一些看门狗功能,低电压复位等等都可以通过代码选项配置,在使用keil编译器时通过编译器选择。至于一些分频的配置可以通过寄存器CLKCON设置。
对于之前完全没有接触过中颖芯片的朋友应该会有所帮助,关于这款芯片的例程网上比较少,做完项目后基本该芯片所有的外设我都用到了,一些配置函数都有在这里贴上几段:
希望对大家有所帮助,如有不对之处,也烦请指正,谢谢大家!!!