在线时间8 小时
UID2006940
注册时间2013-5-3
NXP金币0
该用户从未签到
中级会员
 
- 积分
- 472
- 最后登录
- 1970-1-1
|
发表于 2014-1-3 11:42:16
|
显示全部楼层
回复:请教
回复第 11 楼 于2014-01-02 16:33:25发表:
回复第 10 楼 于2014-01-02 16:09:45发表:
回复第 9 楼 于2014-01-02 15:48:19发表:
回复第 8 楼 于2014-01-02 15:35:14发表:
回复第 7 楼 于2014-01-02 15:17:50发表:
非常感谢,看了文件,cw设置好这个频率值通过编程器烧写到芯片的NVM”地址“永久保存,这个“地址”是编程器默认的或者是可以自定义的?
编译器默认就会烧到trim对应的地址上去
基本上知道是怎么回事啦,不明白的是其他芯片在datasheet里都指定了这个地址,而这个片子却要依靠编程器显示才能知道,是不是说明书有误还是啥原因?
你可以在代码里设置trim寄存器的值来设置trim.
文件里提供的方法是CW特有的feature, 让用户可以在下载的过程中能够用这种简单的方法设置trim
trim寄存器就是ICS_C3和ICS_C4(1位)了吧,总共是9BIT,最大值是512,如果直接进行赋值频率值显然容量太小(频率30多K),如果是周期,好像也不行(小数点没办法)。。cw处理器专家是这么搞的:
ICS_C3 = *(uint8_t*)0xFF6FU; /* Initialize ICS_C3 register from a non volatile memory */
ICS_C4 = (uint8_t)((*(uint8_t*)0xFF6EU) & (uint8_t)0x01U);
疑问1:您所说的在代码里直接给trim赋值,到底是什么值。
疑问2:这个0xFF6F为啥说明书里不指明,而在编程序的时候又用得着。
谢谢,别被我问烦了,我的名字叫小白,哈哈
我不是专门搞8bit MCU的,只是看了你的问题很感兴趣,找了9S08PA8的Reference Manual 和Data Sheet 看了下,如你所说,出厂时,trim值会烧写在flash中,而这个地址对用户是不可见的,Manual 上说是 "in a factory reserved memory location"。 其实在我所接触过的MCU中,这个地址对于用户都是不可知的,复位初始化时,这个值会拷入到ICS_C3 和 ICS_C4中,这个是MCU自己做的,不需要用户操作。
你看到的代码:
ICS_C3 = *(uint8_t*)0xFF6FU; /* Initialize ICS_C3 register from a non volatile memory */
ICS_C4 = (uint8_t)((*(uint8_t*)0xFF6EU) & (uint8_t)0x01U);
这个地址不是上面所说的出厂时的'reserved memory location', 这是我的理解,因为对照memory map来看,这个地址就是个普通的flash地址,客户可以随意访问的。而且0xFF6F和0xFF6E,是用户自己在PE里面设置的,用户可以设置为其它地址。还有一个原因,这个拷贝是客户的application 去做的,并不是MCU复位自动作的。
下面这段是从Reference Manual 拷贝的,基本可以解释清楚:
All MCU devices are factory programmed with a trim value in a factory reserved
memory location. This value is uploaded to the ICS_C3 register and ICS_C4 register
during any reset initialization. For finer precision, trim the internal oscillator in the
application and set the ICS_C4[SCFTRIM] bit accordingly.
我没怎么接触过8bit 的MCU, 上面仅仅是我刚才浏览manual的理解,希望大家共同讨论,特别是8bit的专家给出宝贵指导
|
|