[AVR单片机] 关于self program 的问题

[复制链接]
2036|15
 楼主| tsdwddp 发表于 2013-7-19 08:54 | 显示全部楼层 |阅读模式
本帖最后由 tsdwddp 于 2013-7-19 10:00 编辑

我最近在用Xmega实现ADC以及温度检测的的功能,datasheet中说要从signature row中读取数据,查了很多资料,都说下面几个步骤:

The Read User Signature Row and Red Calibration Row commands are used to read one byte
from the User Signature Row or Calibration Row.
1. Load the Z-pointer with the byte address to read.
2. Load the NVM CMD register with the Read User Signature Row / Calibration Row
command
3. Execute the LPM instruction.
The destination register will be loaded during the execution of the LPM instruction


太抽象了,不好理解!
有没有文明做过相关的东西!给点example or advice!
thanks!

 楼主| tsdwddp 发表于 2013-7-19 08:56 | 显示全部楼层
在线,坐等高手指点
 楼主| tsdwddp 发表于 2013-7-19 09:57 | 显示全部楼层
没人吗
qin552011373 发表于 2013-7-19 12:00 | 显示全部楼层
官网没有例程?
 楼主| tsdwddp 发表于 2013-7-19 13:13 | 显示全部楼层
qin552011373 发表于 2013-7-19 12:00
官网没有例程?

谢谢提醒!已经问过了!也找过资料了,目前在ASF里找了一个API,不过是一个封装好的函数,汇编写的,也可以用,如果有C的话就更好了!
qin552011373 发表于 2013-7-19 15:37 | 显示全部楼层
tsdwddp 发表于 2013-7-19 13:13
谢谢提醒!已经问过了!也找过资料了,目前在ASF里找了一个API,不过是一个封装好的函数,汇编写的,也可 ...

理解了就搞成C语言用了
qin552011373 发表于 2013-7-19 15:41 | 显示全部楼层
tsdwddp 发表于 2013-7-19 13:13
谢谢提醒!已经问过了!也找过资料了,目前在ASF里找了一个API,不过是一个封装好的函数,汇编写的,也可 ...

或者  你把汇编发上来一块研究下
 楼主| tsdwddp 发表于 2013-7-22 15:48 | 显示全部楼层
qin552011373 发表于 2013-7-19 15:41
或者  你把汇编发上来一块研究下

        汇编程序如下:其中nvm_read_byte为1函数名,其声明为uint8_t nvm_read_byte(uint8_t nvm_cmd, uint16_t address);汇编程序是如何和C语言嵌套的呢?猜测:R24中的数据是想要得到的即函数nvm_read_byte的返回值
        汇编注释可以结合1楼步骤看。
        Z为指针寄存器!
        1:将要读的production signature row地址放到Z中
        2:写相应CMD的命令
        3:读数据         
        PUBLIC_FUNCTION(nvm_read_byte)
        lds r20, NVM_CMD          ; Store NVM command register
        mov ZL, r22               ; Load byte index into low byte of Z.
        mov ZH, r23               ; Load high byte into Z.
        sts NVM_CMD, r24          ; Load prepared command into NVM Command register.
        lpm r24, Z                ; Perform an LPM to read out byte
        sts NVM_CMD, r20          ; Restore NVM command register
        ret

        END_FUNC(nvm_read_byte)

    可以换成C吗?
qin552011373 发表于 2013-7-22 18:29 | 显示全部楼层
tsdwddp 发表于 2013-7-22 15:48
汇编程序如下:其中nvm_read_byte为1函数名,其声明为uint8_t nvm_read_byte(uint8_t nvm_cmd, uint16_t ...

直接嵌到c语言里面也可以的,我记得有个语法asm(“”)
qin552011373 发表于 2013-7-22 18:31 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
qin552011373 发表于 2013-7-22 18:32 | 显示全部楼层
本想打算复制过来一部分代码   但是怕你看不太明白怎么用  就直接把winavr的help传上来了
qin552011373 发表于 2013-7-22 18:34 | 显示全部楼层
下载之后随便打开一个   找到User Manual下的Inline Assembler Cookbook   可以具体参考一下   最后一个Example Projects  有具体的c和汇编连调的例程
 楼主| tsdwddp 发表于 2013-7-23 08:02 | 显示全部楼层
qin552011373 发表于 2013-7-22 18:34
下载之后随便打开一个   找到User Manual下的Inline Assembler Cookbook   可以具体参考一下   最后一个Exa ...

好的,我来看一下
qin552011373 发表于 2013-7-23 08:16 | 显示全部楼层
tsdwddp 发表于 2013-7-23 08:02
好的,我来看一下

搞定的话及时结贴三分哈

评分

参与人数 1威望 +3 收起 理由
shenpingbing + 3

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

54

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部