阅读:1202回复:1
关于用avr8515+菲利浦PDIUSBD12+atmel at45db642作u盘的问题
关于用avr8515+菲利浦PDIUSBD12+atmel at45db642作u盘的问题
我在网上找到了avr8515+菲利浦PDIUSBD12做usb接口的代码。在阅读时有些地方不是很明白,请高手赐教。 在hal.c的这个文件中有以下代码 #include \"AvrUsb.H\" void outportb(unsigned int nPort, unsigned char nVal) { volatile unsigned char *exAddress; exAddress =(volatile unsigned char *) nPort; *exAddress = nVal; } unsigned char inportb(unsigned int nPort) { unsigned char nVal; volatile unsigned char *exAddress; exAddress =(volatile unsigned char *) nPort; nVal = *exAddress; return nVal; } 在hal.h有以下代码 #ifndef __HAL_H__ #define __HAL_H__ #define IC_D12_COMMAND 0x7F00 #define IC_D12_DATA 0x7E00 void outportb(unsigned int nPort, unsigned char nVal); unsigned char inportb(unsigned int nPort); void Delay(unsigned char nFactor); void DelayMs(unsigned char nFactor); #endif /*__HAL_H__*/ 在这个project中的其他部分有调用这两个函数(outportb,inportb)的地方 如 void USBD12_SetEndpointEnable(unsigned char bEnable) { if(bAvrUsbFlags.bits.bIN_ISR == 0) DISABLE_INTERRUPTS; outportb(IC_D12_COMMAND, 0xD8); if(bEnable) outportb(IC_D12_DATA, 1); else outportb(IC_D12_DATA, 0); if(bAvrUsbFlags.bits.bIN_ISR == 0) ENABLE_INTERRUPTS; } 其中“0xD8”在菲利浦PDIUSBD12手册中可以查到是“设置端点使能”的 我想问一下IC_D12_COMMAND 0x7F00 IC_D12_DATA 0x7E00 这个地址是不是太高了,在AVR8515单片机中能用到这么高的地址吗? 还有在hal.c中用到了volatile指针,他的寻址范围是不是太大了,他不是一个16位指针吗,听同学说在win98中都用不到这个volatile语句。 :( |
|
沙发#
发布于:2003-05-15 00:08
请问你是在哪里下载到这这些程序的?
麻烦你告诉我网址。 zenker@sohu.com |
|