📄 atmelusbci.c
字号:
/*
* Copyright (c) 2004,北京博创兴业科技有限公司
* All rights reserved.
*
* 文件名称:atmelusbci.c
* 文件标识:atmelusbci
* 摘 要:USB操作相应函数定义
*
* 当前版本:2.0
* 作 者:Kent
* 完成日期:2004年5月20日
*
* 取代版本:1.1
* 原作者 :Frank
* 完成日期:2003年8月10日
*/
#include "REGSND1.H"
#include "atmelusbci.h"
#define OSCclk 20//采用20M时钟,后续的许多编程内容与此时钟频率有关
//设置PLL的时钟,并得到USB工作所需要的48M时钟
int AtmelUSBInit(unsigned char NDIV, unsigned int RDIV, unsigned char USBCD)
{
int i;
//USB 时钟的频率计算方法
// PLLclk=(OSCclk*(RDIV+1))/(int)(NDIV+1);
// USBclk=PLLclk/(int)(USBCD+1);
CKCON |= X2;//Set to select 6 clock periods per machine cycle即X2模式启动
//set PLL CLK
PLLNDIV = 0x7f & NDIV;//set NDIV
PLLCON |= (0x3 & RDIV) << 6;//set RDIV
PLLRDIV = (0x3ff & RDIV) >> 2;
USBCLK = USBCD & 0x03;//设置USBCLK
PLLCON &= (~PLLRES);//Enable PLL
PLLCON |= PLLEN;
//USBCON Register
USBCON &= (~USBE);//禁止USB控制器
for (i=0; i<3000; i++);//延时
USBCON |= USBE;//使能USB控制器
return (0);
}
//设置端点的工作模式
void EpEnable(void)
{
UEPNUM = 0x00;//Ep0 as control Endpoint
UEPCONX = 0x80;
UEPNUM = 0x01;//Ep1 as Bulk-in Endpoint
UEPCONX = 0x86;
UEPNUM = 0x02;//Ep2 as Bulk-out Endpoint
UEPCONX = 0x82;
UEPRST = 0x07;//rest FIFO
UEPRST = 0x00;
UEPIEN = 0x07;//Endpoint Interrupt Enable
USBIEN |= EEOFINT;
USBADDR = FEN;//Function Enable
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -