📄 main.c
字号:
//* File Name : main file
#include "board.h"
#include "cdc_enumerate.h"
#define MSG_SIZE 1000
extern void Usart_init ( void );
extern void AT91F_US_Put( char *buffer);
extern void Trace_Toggel_LED( unsigned int led) ;
struct _AT91S_CDC pCDC;
/*******************************************************************************
* 说明:AT91F_USB_Open函数,打开USB器件
* 参数:无
* 返回值:无
*******************************************************************************/
void AT91F_USB_Open(void) {
// Set the PLL USB Divider
AT91C_BASE_CKGR->CKGR_PLLR |= AT91C_CKGR_USBDIV_1 ; // 设置PLL时钟
AT91C_BASE_PMC->PMC_SCER = AT91C_PMC_UDP; // 允许48MHz USB时钟频率
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_UDP);
AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16); // 设置PIO模式,配置为输出
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA16);// 设置上拉电阻
AT91F_CDC_Open(&pCDC, AT91C_BASE_UDP); // 通过初始化结构体打开CDC
}
/*******************************************************************************
* 说明:主函数
* 参数:无
* 返回值:无
*******************************************************************************/
int main ( void ) {
char data[MSG_SIZE];
unsigned int length;
AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5<<24); // 允许复位,最小复位时间960 us
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ; // 允许PIOA时钟
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ; // PIOA配置为输出,用于LED
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ; // 熄灭LED
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1 ) ; // 点亮LED1
AT91F_USB_Open(); // 初始化USB器件
while (!pCDC.IsConfigured(&pCDC)); // 等待枚举结束
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1 ) ;
Usart_init(); // UART初始化,中断方式
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED_MASK ) ; // 点亮所有LED
while (1) { // 循环
length = pCDC.Read(&pCDC, data, MSG_SIZE);
data[length]=0;
Trace_Toggel_LED( LED1) ;
AT91F_US_Put(data);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -