⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmelusbci.c

📁 这个是一个完整的MP3项目
💻 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 + -