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

📄 main.c

📁 IAR EWARM嵌入式系统编程与实践光盘源码
💻 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 + -