搜索
bottom↓
回复: 2

马老师,晚辈向您请教,有关avr寄存器的问题

[复制链接]

出0入0汤圆

发表于 2007-12-28 11:38:32 | 显示全部楼层 |阅读模式
To write a word to the Page Buffer, load the word into the R1:R0 Registers. Set the Zregister
to point to the correct word and set only the SPMEN bit in the SPMCR Register.
The SPM instruction must then be executed within four cycles.
程序实现为:
void boot_page_fill(unsigned int address,int data)  
{  
    asm("mov r30,r16\n"   
        "mov r31,r17\n"   //前两句是使z寄存器指向要写入的字 即: Set the Zregister to point to the correct word           
        "mov r0,r18\n"  
        "mov r1,r19\n"); //这句话应该是把上面要写入的字,存入r0,r1寄存器 即:load the word into the R1:R0 Registers            
    SPMCSR = 0x01;       //set only the SPMEN bit in the SPMCR Register
    asm("spm\n");  
}  

我想问的是,r16,r17和 r18,r19有什么关系? 我觉得r18,r19要是换成了r17,r18倒是和手册中说的一样了呢?

马老师请指教!

第二个问题:
The Z-register is used to select the page to be erased. Set up the Z-register to point to a
byte in the page to be erased. The lower bits selecting the byte within the page are
ignored. For instance, on a device with a page size of 32 words (64 bytes), the lower six
bits of the Z-register are ignored.

其中:
上面提到的例子,为什么z寄存器的低6位被忽略?

谢谢马老师!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2007-12-29 02:05:48 | 显示全部楼层
第1个问题:
英文说明: R0.R1中要写的数据,Z寄存器是地址.

下面的程序是我编写的<M128>书中的例子,是在ICC平台下嵌入汇编的函数:

void boot_page_fill(unsigned int address,int data)   
{   
    asm("mov r30,r16\n"     
        "mov r31,r17\n"   //前两句是使z寄存器指向要写入的字 即: Set the Zregister to point to the correct word            
        "mov r0,r18\n"   
        "mov r1,r19\n"); //这句话应该是把上面要写入的字,存入r0,r1寄存器 即:load the word into the R1:R0 Registers            
    SPMCSR = 0x01;       //set only the SPMEN bit in the SPMCR Register  
    asm("spm\n");   
}   

在ICC中,调用函数时,第一个参数是使用R16.R17传递的,第2个参数是使用r18.r19传递的(参见ICC的所带的使用帮助).
第1个参数为地址,放入Z寄存器中(r30.r31),第2个参数是数据,放入r0.r1中,后面就是英文所讲的,写入到FLASH中.

第2个问题:
AVR中写FLASH的操作是按页操作的,不同的AVR,每页所含的单元不一样.如果一个页有64个字节(32字)那么需要6个BIT表示.
对FLASH操作时,Z寄存器中为FLASH的地址.因此低6位表示64个字节(实际1-5位表示字地址,0位表示高位字节或低位字节).而高位表示页地址.对于擦除FLASH的操作,是整页擦除的,因此只需要高位的页地址,低6位没有意义了.

出0入0汤圆

 楼主| 发表于 2008-1-4 13:24:30 | 显示全部楼层
真的很感谢马老师,马老师这么晚还在工作,真是可敬啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-2 18:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表