5
19
149
注册会员
//////////////////////////////////////// // 文件名称: main.c // 文件描述: GPIO // 文件版本: V1.0 // 修改记录: // 1. (2025-03-30) 创建文件 //////////////////////////////////////// #include "config.h" //默认已包含stdio.h、intrins.h、ai_usb.h等头文件 //////////////////////////////////////// // 项目主函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void main(void) { u8 Key_Num = 0; u8 Led_State = 0xff; SYS_Init(); P40 = 0; while (1) { USBLIB_OUT_Done(); //查询方式处理USB接收的数据 if(P32 == 0) { delay_ms(10); if(P32 == 0) { Led_State = Led_State << 1; while(P32 == 0); P0 = Led_State; Key_Num++; if(Key_Num == 8) { Key_Num = 0; Led_State = 0xff; } } } } } //////////////////////////////////////// // 系统初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void SYS_Init(void) { EnableAccessXFR(); //使能访问扩展XFR AccessCodeFastest(); //设置最快速度访问程序代码 AccessIXramFastest(); //设置最快速度访问内部XDATA IAP_SetTimeBase(); //设置IAP等待参数,产生1us时基 P0M0 = 0x00; P0M1 = 0x00; //初始化P0口为准双向口模式 P1M0 = 0x00; P1M1 = 0x00; //初始化P1口为准双向口模式 P2M0 = 0x00; P2M1 = 0x00; //初始化P2口为准双向口模式 P3M0 = 0x00; P3M1 = 0x00; //初始化P3口为准双向口模式 P4M0 = 0x00; P4M1 = 0x00; //初始化P4口为准双向口模式 P5M0 = 0x00; P5M1 = 0x00; //初始化P5口为准双向口模式 P6M0 = 0x00; P6M1 = 0x00; //初始化P6口为准双向口模式 P7M0 = 0x00; P7M1 = 0x00; //初始化P7口为准双向口模式 CLK_Init(); //时钟模块初始化 USBLIB_Init(); //USB库初始化 EnableGlobalInt(); //使能全局中断 } //////////////////////////////////////// // 毫秒延时函数 // 入口参数: ms (设置延时的毫秒值) // 函数返回: 无 //////////////////////////////////////// void delay_ms(uint16_t ms) { uint16_t i; do { i = MAIN_Fosc / 6000; while (--i); } while (--ms); } //////////////////////////////////////// // 时钟初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void CLK_Init(void) { CLK_SYSCLK_Divider(10); //切换主时钟前先将系统时钟降频 HIRC_40M(); //选择内部预置的频率 CLK_MCLK_HIRC(); //选择内部高精度HIRC作为主时钟 CLK_MCLK2_BYPASS(); //旁路MCLK2,直接使用MCLK选择 CLK_SYSCLK_Divider(1); //设置系统时钟分频系数 CLK_HSIOCK_MCLK(); //选择MCLK主时钟作为高速外设时钟源 CLK_HSIOCK_Divider(1); //设置高速外设时钟预分频系数 CLK_SPICLK_Divider(1); //设置SPI时钟预分频系数 CLK_I2SCLK_Divider(1); //设置I2S时钟预分频系数 CLK_PWMACLK_Divider(1); //设置PWMA时钟预分频系数 CLK_PWMBCLK_Divider(1); //设置PWMB时钟预分频系数 CLK_TFPUCLK_Divider(1); //设置TFPU时钟预分频系数 } //////////////////////////////////////// // USB库初始化函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void USBLIB_Init(void) { usb_init(); //初始化USB模块 USB_SetIntPriority(0); //设置中断为最低优先级 set_usb_ispcmd("@STCISP#"); //设置USB不停电下载命令 } //////////////////////////////////////// // 等待USB配置完成函数 // 入口参数: 无 // 函数返回: 无 //////////////////////////////////////// void USBLIB_WaitConfiged(void) { while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置 } //////////////////////////////////////// // USB设备接收数据处理程序 // 入口参数: 无 // 函数返回: 无 // bUsbOutReady:USB设备接收数据标志位 // OutNumber:USB设备接收到的数据长度 // UsbOutBuffer:保存USB设备接收到的数据 //////////////////////////////////////// void USBLIB_OUT_Done(void) { if (bUsbOutReady) //查询是否有接收到数据 { USB_SendData(UsbOutBuffer, OutNumber); //原路返回, 用于测试 usb_OUT_done(); //当前包的数据处理完成 } } 复制代码
使用道具 举报 送花
本版积分规则 发表回复 回帖后跳转到最后一页
|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )
GMT+8, 2025-5-2 18:21 , Processed in 0.107141 second(s), 44 queries .
Powered by Discuz! X3.5
© 2001-2025 Discuz! Team.