|
刚刚接触BOOT LOAD这一块, 照例看了马潮老师的教程, 但以前没接触汇编, 有几句看不懂,
附上原文的一部分
void boot_page_ew(long p_address,char code)
{
asm("mov r30,r16\n"
"mov r31,r17\n"
"out 0x3b,r18\n"); //将页地址放入Z寄存器和RAMPZ的Bit0中
SPMCSR = code; //寄存器SPMCSR中为操作码
asm("spm\n"); //对指定Flash页进行操作
}
//填充Flash缓冲页中的一个字
void boot_page_fill(unsigned int address,int data)
{
asm("mov r30,r16\n"
"mov r31,r17\n" //Z寄存器中为填冲页内地址
"mov r0,r18\n"
"mov r1,r19\n"); //R0R1中为一个指令字
SPMCSR = 0x01;
asm("spm\n");
}
估计很多人使用过这代码, 请问一下朋友们, mov r30,r16\n", mov r31,r17\n",out 0x3b,r18\n" 这三句,是说将实参值传递到R30,R31,0x3b。 是怎么确定实参值在r16,r17,r18寄存器中,
还有就是 out 0x3b,r18\n"); //将页地址放入Z寄存器和RAMPZ的Bit0中 这句,不懂什么意思, 我看过ATmega32的数据手册,没找到RAMPZ是什么。 希望高手们解答, 非常感谢 |
|