yaya001
驱动牛犊
驱动牛犊
  • 注册日期2003-05-02
  • 最后登录2021-02-19
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1201回复:1

关于用avr8515+菲利浦PDIUSBD12+atmel at45db642作u盘的问题

楼主#
更多 发布于:2003-05-02 14:59
关于用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语句。
 :(
zenker
驱动牛犊
驱动牛犊
  • 注册日期2003-05-14
  • 最后登录2006-06-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-15 00:08
请问你是在哪里下载到这这些程序的?

麻烦你告诉我网址。

zenker@sohu.com
游客

返回顶部