不好意思,刚才看到您的回帖。我把我的程序给您贴一下,您帮忙看看,可以吗?非常感谢!!!
void Read_Memory_flash(void)
{
static u32 Package_Read_Count_32u =0, Data_Buffer_Offset_32u =0;
if (!Package_Read_Count_32u)
{
PageRead_Nor(Data_Buffer, NorPageAddr_u32G, CSW.dDataResidue);
UserToPMABufferCopy(Data_Buffer, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE1);
Package_Read_Count_32u = CSW.dDataResidue - BULK_MAX_PACKET_SIZE1;
Data_Buffer_Offset_32u = BULK_MAX_PACKET_SIZE1;
}
else
{
UserToPMABufferCopy(Data_Buffer + Data_Buffer_Offset_32u, ENDP1_TXADDR, BULK_MAX_PACKET_SIZE1);
Package_Read_Count_32u -= BULK_MAX_PACKET_SIZE1;
Data_Buffer_Offset_32u += BULK_MAX_PACKET_SIZE1;
}
SetEPTxCount(ENDP1, BULK_MAX_PACKET_SIZE1);
SetEPTxStatus(ENDP1, EP_TX_VALID);
Memory_Offset += BULK_MAX_PACKET_SIZE1;
Transfer_Length -= BULK_MAX_PACKET_SIZE1;
CSW.dDataResidue -= BULK_MAX_PACKET_SIZE1;
Led_RW_ON();
if (Package_Read_Count_32u == 0)
{
Data_Buffer_Offset_32u = 0;
Bot_State = BOT_DATA_IN_LAST;
Led_RW_OFF();
}
}
每调用一次这个函数,发送64字节,发送完以后进入“正确传输中断”,在中断里调用这个函数,继续发送。上位机使用的函数是DeviceIOControl()函数,每发送一次命令需要传输的字节数与Data_Buffer的大小一致。但是这样速度非常慢,希望您帮忙看一下,问题出在什么地方,真是非常感谢!!!
|