void CheckBusy() { unsigned int i; OutPin(nWR,L); DelayUs(1);OutPin(nWR,H); DelayUs(1);//DelayMs(2); for(i=0;i<50000;i++) { DelayUs(1); if(InPin(RDY)) break; if(i==40000) Fail(1,1,1,1); } } 解释这段代码
时间: 2023-08-26 14:05:42 浏览: 171
这段代码是在检查一个设备是否繁忙。具体来说,首先将nWR引脚拉低,然后延迟1微秒,再将nWR引脚拉高,再延迟1微秒,等待设备响应。如果在50000次循环中,设备的RDY引脚变为高电平,则说明设备已经准备好了,可以进行下一步操作。如果到了40000次循环还没有响应,说明设备可能出现问题,会调用Fail函数进行错误处理。
相关问题
if((ChipAddr&(F_PAGE_SIZE-1))==(F_PAGE_SIZE-1)) { OutPin(nBS1,L); CheckBusy(); // Load_comm(1,0,0, ChipAddr>>8); } 解释这段代码含义
这段代码是一个嵌入式系统中的片上Flash存储器(Chip)的写入处理过程。下面对代码的每一行进行解释:
1. `if((ChipAddr&(F_PAGE_SIZE-1))==(F_PAGE_SIZE-1))`
这行代码进行的是一个判断,用于检测当前写入的地址是否为页边界。具体来说,它先将写入地址(ChipAddr)和页大小(F_PAGE_SIZE)的掩码进行与运算,得到的结果是一个二进制数,表示当前地址在所在的页中的偏移量。如果这个偏移量等于页大小减一(也就是二进制全是1),那么说明当前地址是页边界。
2. `{`
这个左花括号表示代码块的开始。
3. `OutPin(nBS1,L);`
这行代码的作用是将一个引脚(nBS1)的电平置为低电平(L),以准备进入写入模式。这个引脚通常与片上Flash的写入控制信号相关。
4. `CheckBusy();`
这行代码的作用是等待片上Flash的忙标志被清除。在写入数据之前,需要确保片上Flash处于空闲状态,否则可能导致写入失败。
5. `// Load_comm(1,0,0, ChipAddr>>8);`
这行代码是一个注释,被两个斜杠(//)注释掉了。根据注释内容,它实际上是一条写入命令,用于设置片上Flash的写入地址。具体来说,它将一个命令字(1,0,0)和写入地址(ChipAddr>>8)传递给片上Flash进行处理。
6. `}`
这个右花括号表示代码块的结束。
总体来说,这段代码的作用是在写入数据之前,将片上Flash设置为写入模式,并等待片上Flash的忙标志被清除。如果当前写入的地址是页边界,还需要发送一条写入命令进行设置。
阅读全文