|
XMEGA ADC部分遇到问题,ADC校准字节如何读取?
这几天读XMEGA文档,测试目前项目中,要用到的XMEGA的一些功能,越仔细读文档,越觉得XMEGA功能强大。开始试验还比较顺利,IO口、定时器、中断系统
、时钟系统、串行通信,都比较快试验通过了。昨天开始调阅读ADC部分,其中提到ADC开启前,必须对ADC进行校准,而校准字节就在XMEGA产品签名行
(Production Signature Row )中,于是翻到第4章,阅读存储器部分,然后再翻到 第30章,读存储器编程部分,看完过后,终于知道怎么读取ADC校准信息了
,今天开始写测试程序,麻烦来了,文档中给出的 Production Signature Row 的地址都是偏移地址,那么其起始地址从何开始呢?
再读4.3.4,如下图所示,说 Production Signature Row 使用独立的存储器段,那么就假设其基地址是不是从0x00开始呢?
![](http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_503121.JPG)
(原文件名:Production Signature Row 说明.JPG)
再仔细看 Production Signature Row 的偏移地址,晕,为什么还有重复的呢?共用地址?如下图所示,地址重复的地方还有好几个。
![](http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_503122.JPG)
(原文件名:批号(LOT Number)地址重复.JPG)
不管这么多,先写程序试验,试验程序如下。
;==========================================================================
; 主程序
;==========================================================================
MAIN: ;//
NOP ;//
CLI ;//
LDI R16, 0x2F ;// 堆栈指针初始化
OUT CPU_SPH, R16 ;//
LDI R16, 0xFF ;//
OUT CPU_SPL, R16 ;//
LDI R16, 0x47 ;// 1. 设置晶体参数
STS OSC_XOSCCTRL, R16 ;//
LDI R16, 0x08 ;//
STS OSC_CTRL, R16 ;// 开启外部晶体
WAIT_XOSC_READY: ;// 2. 等待外部晶体就绪
LDS R16, OSC_STATUS ;//
ANDI R16, 0x08 ;//
BREQ WAIT_XOSC_READY ;//
LDI R16, 0xD8 ;// 3. 设置外部晶体时钟为系统时钟
OUT CPU_CCP, R16 ;//
LDI R16, 0x03 ;// 设置时钟为外部晶体
STS CLK_CTRL, R16 ;//
CLR R16 ;// 4. 系统时钟分频设置,不分频
STS CLK_PSCTRL, R16 ;//
LDI R16, 0xD8 ;// 5. 关键IO寄存器修改允许,系统时钟锁定设置寄存器是 关键IO寄存器
OUT CPU_CCP, R16 ;//
LDI R16, 0x01 ;// 系统时钟锁定设置,锁定系统时钟,禁止修改时钟选项
STS CLK_LOCK, R16 ;//
CALL Sub_System_IO_Init ;//
CALL Sub_System_TCC0_Init ;//
CALL Sub_System_UARTE0_Init ;//
CLR R30 ;// 这里测试读取 Production Signature Row
CLR R31 ;//
LDI R20, 0x02 ;//
test_loop: ;//
INC R30 ;//
LDI R21, 0x31 ;// 地址范围 0x00 - 0x31
SUB R21, R30 ;//
BRCC Test_Entry ;//
CLR R30 ;//
Test_Entry: ;//
CALL Sub_Read_Signature_Rows ;//
RJMP test_loop ;//
;==========================================================================
; 函数名称:Sub_Read_Signature_Rows
; 函数功能:读取产品签名、用户签名信息
; 入口参数:Z(R31 R30):签名信息地址; R20:读取命令
; 出口参数:R0?
; 用寄存器: ……
; 程序版本:1.0
; 编写日期:2009-11-14
; 修改次数:0
; 修改日期:
; 修改内容:
;==========================================================================
Sub_Read_Signature_Rows: ;// 读取签名信息
NOP ;//
Wait_NVM_Operate_End: ;// 1. 等待 NVM 操作完毕
LDS R16, NVM_STATUS ;//
TST R16 ;//
BRNE Wait_NVM_Operate_End ;//
STS NVM_CMD, R20 ;// 2. 设置命令
LPM ;// 3. 读取
NOP ;//
RET ;//
使用仿真器,获取 Production Signature Row 的读取结果,分别使用了两个模块测试,其数据表如下所示。
![](http://cache.amobbs.com/bbs_upload782111/files_22/ourdev_503123.JPG)
(原文件名:测试结果.JPG)
昨天在官方网站上,看到一篇读取 XMEGA 的 Production Signature Row 的文章,当时没注意,结果今天上不了 ATMEL 网站了。
目前问题仍未解决,特向 傻孩子、技术火腿 求助,同时请知道的朋友指点一下,谢谢。
1. Production Signature Row 的基地址是从 0x00开始的吗?
2. Production Signature Row 的偏移地址为何有重复的?
3. 如何确定读出的信息就是需要的信息?(1、2确认后,3应该不难解决)。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|