打印
[AVR单片机]

关于self program 的问题

[复制链接]
1604|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 | 只看该作者
官网没有例程?

使用特权

评论回复
5
tsdwddp|  楼主 | 2013-7-19 13:13 | 只看该作者
qin552011373 发表于 2013-7-19 12:00
官网没有例程?

谢谢提醒!已经问过了!也找过资料了,目前在ASF里找了一个API,不过是一个封装好的函数,汇编写的,也可以用,如果有C的话就更好了!

使用特权

评论回复
6
qin552011373| | 2013-7-19 15:37 | 只看该作者
tsdwddp 发表于 2013-7-19 13:13
谢谢提醒!已经问过了!也找过资料了,目前在ASF里找了一个API,不过是一个封装好的函数,汇编写的,也可 ...

理解了就搞成C语言用了

使用特权

评论回复
7
qin552011373| | 2013-7-19 15:41 | 只看该作者
tsdwddp 发表于 2013-7-19 13:13
谢谢提醒!已经问过了!也找过资料了,目前在ASF里找了一个API,不过是一个封装好的函数,汇编写的,也可 ...

或者  你把汇编发上来一块研究下

使用特权

评论回复
8
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吗?

使用特权

评论回复
9
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(“”)

使用特权

评论回复
10
qin552011373| | 2013-7-22 18:31 | 只看该作者
avr-libc-user-manual-1.7.1.rar (1.02 MB)

使用特权

评论回复
11
qin552011373| | 2013-7-22 18:32 | 只看该作者
本想打算复制过来一部分代码   但是怕你看不太明白怎么用  就直接把winavr的help传上来了

使用特权

评论回复
12
qin552011373| | 2013-7-22 18:34 | 只看该作者
下载之后随便打开一个   找到User Manual下的Inline Assembler Cookbook   可以具体参考一下   最后一个Example Projects  有具体的c和汇编连调的例程

使用特权

评论回复
13
tsdwddp|  楼主 | 2013-7-23 08:02 | 只看该作者
qin552011373 发表于 2013-7-22 18:34
下载之后随便打开一个   找到User Manual下的Inline Assembler Cookbook   可以具体参考一下   最后一个Exa ...

好的,我来看一下

使用特权

评论回复
14
qin552011373| | 2013-7-23 08:16 | 只看该作者
tsdwddp 发表于 2013-7-23 08:02
好的,我来看一下

搞定的话及时结贴三分哈

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
shenpingbing + 3
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

54

帖子

1

粉丝