📄 main.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 + -