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

📄 main.c

📁 usb同信
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2005-6-8
** Last Version:		1.0
** Descriptions:		The LPC214x USB Simple Example main.c file
**						LPC214x USB 最简单例子 main.c 文件
**------------------------------------------------------------------------------------------------------
** Created by:			郑明远
** Created date:		2005-6-8
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version: 
** Descriptions:
**
********************************************************************************************************/

/*
修改:2008.7.24
给讯通公司作为底层驱动开发的模拟收发usb设备
比先前增加了in数据结束标识
屏蔽了无线接收
现在读写数据都可以得到反馈
增加节电设置
*/

#include "config.h"

#include "USBConfig.h"										/* 加入USB相关头文件 */
#include "USBCI.h"
#include "USBDriver.h"

#define  led  17  //0.17

extern void prints(char *pt,uint8 a);
extern void printc(char a);
extern int8  ep2_len;
extern int8  ep1_len;
//cc2500的信号质量评估
//extern uint32 ngood=0;
//extern uint32 nbad=0;

extern uint8 init_cc2500(void);
extern void cc_send(INT8U *txBuffer, INT8U size);
extern INT8U cc_rcv(INT8U *rxBuffer, INT8U length) ;


#define cmdlun   0xf0
#define cmddata  0xf4

typedef struct mysuperdevice{
  
    uint8 zaixian;
	uint8 waddr;
	uint8 wversion;
	uint8 len_name;
	uint8 *name;
	uint8 len_data;
	 
}SUPERDEVICE;

typedef struct{
	uint8 buff[10];
}rcvbuff;

rcvbuff rcv_buff[2];
uint8   rcv_n=0;

SUPERDEVICE wsuperdevice[8];//预计先支持八个设备
uint8  ndevice=0;//当前有几个
uint8  lunaddr=0;


/***************************************************************************************
** 函数名称  : Init_USBInterrupt()
** 功能描述  : 配置USB设备控制器的中断向量和中断优先级
****************************************************************************************/
void Init_USBInterrupt(void)
{
	VICVectCntl0 = (0x20 | 22);								/* USB中断分配到中断向量0 	*/
   	VICVectAddr0 = (INT32U)Usb_Exception;					/* USB中断服务程序地址 */
   	VICIntEnable = 1 << 22;									/* 使能USB中断 */
}
/*
*********************************************************************************************************
** 函数名称 :UART0_Init()
** 函数功能 :串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特率115200。
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************
*/
#define	UART_BPS	38400				// 串口通讯波特率
void UART0_Init (void)
{
	uint16 Fdiv;
	
	PINSEL0|=5;
	U0LCR = 0x83;						// DLAB=1,允许设置波特率
	Fdiv  = (Fpclk / 16) / UART_BPS;	// 设置波特率
	U0DLM = Fdiv / 256;
	U0DLL = Fdiv % 256;
	U0LCR = 0x03;
	U0IER = 1;
	
}

void delay(int a)
{
  while(a--);
}

void warn()
{
	IO0CLR |= 1<<led;
	delay(7241);
	IO0SET |= 1<<led;

}

/***************************************************************************************
**  主 函 数 : main()
***************************************************************************************/
int main (void)
{
	INT8U err;
	uint8 i;
	int32 bb=0;
	//INT8U buff[16]={"good n ="};
	uint8 buff_tp1[]="send out:    data pack(interrupt)\r\n";  
	uint8 buff_tp2[]="send out:   data pack(batch)\r\n";  
	IO0DIR |= 1<<17;
	IO0CLR |= 1<<led;	
	delay(100000);
	IO0SET |= 1<<led;
	PCONP = 0;
	PCONP |= 8;
	UART0_Init();
	err = USB_Initialize();									/* 初始化USB控制器 */
	if (err != 0)
		while(1);											/* 初始化失败,程序停止执行 */
		
	prints("usb_init success!",0);														
	Init_USBInterrupt();									/* 配置USB中断向量 */ 
	 warn();
	IRQEnable();											/* 允许CPU的IRQ中断 */

	    
	bEPPflags.bits.ep1_tx_done = 1;
	bEPPflags.bits.ep2_tx_done = 1;    

	/****************** 主函数是一个无限循环结构 **************/	
	while(1)
	{
	    
		usbserve();											/* 处理USB事件,如USB控制传输,USB总线复位等等 */
		
		if(bEPPflags.bits.configuration == 1)
		{	
			//cc_serve();
			if (bEPPflags.bits.ep1_tx_done == 1)
			{
			    DISABLE();
				bb++;
				if(bb>255)
				  bb = 0;
				buff_tp1[10] = 0x30 + bb/100;
				buff_tp1[11] = 0x30 + bb%100/10;
				buff_tp1[12] = 0x30 + bb%10;
				
				USB_WriteEndpoint(3, sizeof(buff_tp1), buff_tp1);			/* 发送10个字节到PC */
				ENABLE();
				warn();
				bEPPflags.bits.ep1_tx_done = 0;	
				 
			}
			if (bEPPflags.bits.ep1_rxdone == 1)
			{												/* 逻辑端点1收到数据 */
				DISABLE();	
				bEPPflags.bits.ep1_rxdone = 0;				/* 清除逻辑端点1收到数据标志 */
			    for(i=0;i<ep1_len;i++)
					printc( GenEpBuf[i]);
				
				USB_WriteEndpoint(3, ep1_len, GenEpBuf);			/* 发送字节到PC */
				ENABLE();
			    warn();
			    bEPPflags.bits.ep1_tx_done = 0;	
			}
			
			
			if (bEPPflags.bits.ep2_tx_done == 1)
			{
			    DISABLE();		
				bb++;
				if(bb>255)
				   bb = 0;
				
				buff_tp2[10] = 0x30 + bb/100;
				buff_tp2[11] = 0x30 + (bb%100)/10;
				buff_tp2[12] = 0x30 + bb%10;
				
				USB_WriteEndpoint(5, sizeof(buff_tp2), buff_tp2);			/* 发送10个字节到PC */
				ENABLE();
				warn();
				bEPPflags.bits.ep2_tx_done = 0;
			}
			if (bEPPflags.bits.ep2_rxdone == 1)
			{												/* 逻辑端点2收到数据 */
				DISABLE();
				USB_WriteEndpoint(5, ep2_len,EpBuf);			/* 发送10个字节到PC */
				for(i=0;i<ep2_len;i++)
					printc(EpBuf[i]);
				bEPPflags.bits.ep2_rxdone = 0;				/* 清除逻辑端点2收到数据标志 */
				bEPPflags.bits.ep2_tx_done = 0;
				ENABLE();
				warn();
			}		
			//PCON |= 1;
			
		}
	}
	
    return 0;
}



/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -