写进buff,第二个参数是说明从哪个开始byte写入,也就是地址,第三个是写入多少个字节
void WriteBuff(u8 * buff,u16 bufaddr,u16 numofbyte,u8 buff12)
{
u16 i;
u8 op;
buff=(u8*)malloc(8*numofbyte);
for(i=0;i<numofbyte;i++)//¸øêy×é¸3Ö죬òaD′μ½buffÖD
{
buff=45;
}
while(BusyCheck()==0){}
AT45_L;
switch(buff12)
{
case 1 p=WriteBuff1;break;
case 2 p=WriteBuff2;break;
}
spi_rw_byte(op);
spi_rw_byte((u8)(bufaddr>>16));
spi_rw_byte((u8)(bufaddr>>8));
spi_rw_byte((u8)bufaddr);
for(i=0;i<numofbyte;i++)
{
spi_rw_byte(buff);
}
AT45_H;
for(i=0;i<numofbyte;i++)//í¨1y′®¿ú°ÑD′èëμÄDÅÏ¢·¢Ëí3öà′£¬×÷Îa¶Ô±è
{
USART_SendData(USART1,buff);
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==0);
}
while(BusyCheck()==0){}
free(buff);
}[/mw_shl_code]
传入指针,动态分配内存给数组分配空间。buff有528个bytes,第二个参数是说从哪个byte开始读,第三个参数是读几个byte,最后是确定读哪个buff
void ReadBuff(u8 * buff,u32 bufaddr,u32 numofbyte,u8 buff12) { u16 i; u8 op; buff=(u8*)malloc(8*numofbyte); while(BusyCheck()==0){} AT45_L; switch(buff12) { case 1 p=Buff1_Read;break; case 2 p=Buff2_Read;break; } spi_rw_byte(op); spi_rw_byte((u8)(bufaddr>>16)); spi_rw_byte((u8)(bufaddr>>8)); spi_rw_byte((u8)bufaddr); spi_rw_byte(0xff); for(i=0;i<numofbyte;i++) { buff=spi_rw_byte(0xff); } AT45_H; for(i=0;i<numofbyte;i++)//í¨1y′®¿ú°Ñ½óêÕμ½μÄDÅÏ¢·¢Ëí3öà′ { USART_SendData(USART1,buff); while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)==0); } free(buff); } 程序的问题是我用writebuff写超过40个数,就出错,readbuff用串口什么都不显示,少于40个数还能正常显示,找不清问题在哪了。谢谢
|