还有一个问题,在usb_men.c文件的void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)函数中,有这一句:pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);那么每次*pdwVal++,pdwVal的地址都增加4个字节,这应该与APB1总线是32位寻址有关,那也就是说,每次从USB的包缓冲区中读取数据1个字节,对应的缓冲区在控制器中的地址每次跳4个字节,这样理解对吗?
该函数中有个for循环
for (i = n; i != 0; i--)
{
*(uint16_t*)pbUsrBuf++ = *pdwVal++;
pbUsrBuf++;
}
这里面*(uint16_t*)pbUsrBuf++ ,那么pbUsrBuf++ 后地址是加上了2个字节,但是pbUsrBuf原先对应的数组是uint8_t定义的这样难道不应该*(uint8_t*)pbUsrBuf++ 吗? |