完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
自己在nxp系列的小成就,使用库函数写代码
/****************************************Copyright (c)**************************************************** ** Guangzhou ZHIYUAN electronics Co.,LTD. ** ** http://www.embedtools.com ** **--------------File Info--------------------------------------------------------------------------------- ** File name: main.c ** Last modified Date: 2009-05-12 ** Last Version: V1.01 ** Descriptions: The main() function example template ** **-------------------------------------------------------------------------------------------------------- ** Created by: Chengmingji ** Created date: 2009-07-24 ** Version: V1.00 ** Descriptions: 添加用户应用程序 ** 特殊说明:有关NVIC中断设置函数,core_cm3.h里面的NVIC设置函数不可直接使用,因为 ** 本uC/OS任务中为用户级特权,无权限修改NVIC寄存器,必须调用IRQ.H的NVIC设置函数。 ** **-------------------------------------------------------------------------------------------------------- ** Modified by: LiuWeiyun ** Modified date: 2009-07-27 ** Version: V1.01 ** Descriptions: 编写USB_OTG例程 ** ** Rechecked by: WangJianyu *********************************************************************************************************/ #include "LPC177x_8x.h" /* LPC177x_8x外设寄存器 */ #include "includes.h" #include "uart.h" #include "..ZLG.FSFSConfig.h" #include "..ZLG.USBOTGOTGOTGincludes.h" #include /********************************************************************************************************* 变量与宏定义 *********************************************************************************************************/ #define BEEP (1 << 30) /* 蜂鸣器 */ #define BEEP_INIT() LPC_GPIO3->DIR |= BEEP /* 配置P3.30为输出 */ #define BEEP_ON() LPC_GPIO3->CLR |= BEEP /* 蜂鸣器开 */ #define BEEP_OFF() LPC_GPIO3->SET |= BEEP /* 蜂鸣器关 */ #define FILE_SIZE 1024 /* 文件大小 */ #define STR_SEND(s) uart0SendStr(s) /* 发送(打印)字符串 */ /********************************************************************************************************* 按键定义 P2.11和外部中断1(OTG ATX中断)输入复用,故该IO口不能再用作按键输入 请使用杜邦线将按键2(上移按键)连接到SmartCortex M3-1700的P2.1 *********************************************************************************************************/ #define KEY_LEFT (LPC_GPIO0->PIN & (1 << 10) ? 1 : 0) /* 左移键,P0.10 */ #define KEY_RIGHT (LPC_GPIO0->PIN & (1 << 12) ? 1 : 0) /* 右移键,P0.12 */ #define KEY_PRESSED 0 #define KEY_RELEASED 1 /********************************************************************************************************* 定义全局变量 *********************************************************************************************************/ static OS_STK stkMainTask[256]; static OS_STK GstkFileTask[512]; static OS_STK GstkOTGBServeTask[512]; static INT8U Gu8FDataWr[FILE_SIZE]; static INT8U Gu8FDataRd[FILE_SIZE]; static INT8U Gu8FData[] = "USB OTG---Designed by ZLGMCUrn"; /* 文件内容 */ static INT8U Gu8PreX = 0, Gu8CurX = 0; /* X轴的上一次与当前的位置值 */ /********************************************************************************************************* ** Function name: keyServe ** Descriptions: 按键处理 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void keyServe (void) { if (KEY_PRESSED == KEY_LEFT) { Gu8CurX--; } else if (KEY_PRESSED == KEY_RIGHT) { Gu8CurX++; } } /********************************************************************************************************* ** Function name: u***DevHIDServe ** Descriptions: HID鼠标处理 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void u***DevHIDServe (void) { UINT8 pEpBuf[EP1_PACKET_SIZE]; /* 逻辑端点1接收缓冲区 */ if(bEPPflags.bits.hid_enumed == 1) { /* 若HID类设备枚举成功 */ USB_ENTER_CRITICAL_SECTION(); pEpBuf[0] = 0x00; pEpBuf[1] = (INT8U)(Gu8CurX - Gu8PreX); /* X: 发送x变化值 */ pEpBuf[2] = 0; /* Y: 发送y变化值 */ pEpBuf[3] = 0x00; u***DevWriteEndpoint(3, pEpBuf, 4); /* 通过逻辑端点1的IN端点 */ /* 发送鼠标移动值到USB主机 */ USB_EXIT_CRITICAL_SECTION(); Gu8PreX = Gu8CurX; /* 保存X、Y的当前位置值 */ } } /********************************************************************************************************* ** Function name: otgTestInit ** Descriptions: OTG Test初始化 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void otgTestInit (void) { INT8U ucErr; UARTInit(2, 115200); STR_SEND("Here comes the OTG TESTrn"); // OS_NVIC_SetPriority(EINT1_IRQn, 12); // OS_NVIC_EnableIRQ(EINT1_IRQn); ucErr = otgInit(5, 6, 7); if (ucErr != TRUE) { STR_SEND("rnOTG init failrn"); while (1); } NVIC_SetPriority(USB_IRQn, 11); NVIC_EnableIRQ(USB_IRQn); } /********************************************************************************************************* ** Function name: otgBServe ** Descriptions: OTG role B serve ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void otgBServe (void) { while (!otgIsDeviceReady()) { /* 等待枚举完设备 */ OSTimeDly(10); } while (OTG_ROLE_DEVICE == otgGetCurRole()) { keyServe(); u***DevHIDServe(); OSTimeDly(OS_TICKS_PER_SEC / 100); } } /********************************************************************************************************* ** Function name: otgAServe ** Descriptions: OTG role A serve ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void otgAServe (void) { char pcFileAttr[] = "RW"; char pcFileName[] = "A:\OTG.TXT"; HANDLE FHandle; INT32U j, uiLen; INT8U ucErr; OSTaskCreate(OSFileTask, (void *)0, &GstkFileTask[511], 8); OSTimeDly(10); while (1) { j = 0; while (!otgIsDeviceReady()) { /* 等待枚举完设备 */ OSTimeDly(10); if (j++ > 200) { j = 0; STR_SEND("rnwait device ready...rn"); } } while (otgGetCurRole() != OTG_ROLE_HOST) { /* 等待当前角色为主机 */ OSTimeDly(10); } OSAddFileDriver(u***Cammand); /* 增加ATA设备0 */ for (j = 0; j < FILE_SIZE; j++) { Gu8FDataWr[j] = Gu8FData[j % (sizeof(Gu8FData) - 1)]; } OSRemoveFile(pcFileName); /* 删除已存在的同名文件 */ FHandle = OSFileOpen(pcFileName, pcFileAttr); /* 打开文件 */ if (FHandle == Not_Open_FILE) { STR_SEND("rntOSFileOpen failed!rn"); } #if 0 OSFileSeek(FHandle, 0, SEEK_SET); /* 文件指针移到文件开始 */ #endif uiLen = OSFileWrite(Gu8FDataWr, sizeof(Gu8FDataWr), FHandle); /* 写入文件 */ OSFileClose(FHandle); if (uiLen > 0) { OSAllCacheWriteBack(); } if (uiLen >= sizeof(Gu8FDataWr)) { /* 写文件成功 */ STR_SEND("rnWritefile sucess!"); } else { STR_SEND("rnWrite file failed!rn"); } FHandle = OSFileOpen(pcFileName, "R"); /* 打开文件 */ if (FHandle == Not_Open_FILE) { STR_SEND("rntOSFileOpen failed!rn"); } OSFileSeek(FHandle, 0, SEEK_SET); /* 文件指针移到文件头部 */ memset(Gu8FDataRd, 0, sizeof(Gu8FDataRd)); uiLen = OSFileRead(Gu8FDataRd, sizeof(Gu8FDataRd), FHandle); /* 读出文件 */ OSFileClose(FHandle); if (uiLen >= sizeof(Gu8FDataRd)) { /* 读文件成功 */ STR_SEND("rnReadfile sucess"); } else { STR_SEND("rnRead file failed!rn"); } if (memcmp(Gu8FDataRd, Gu8FDataWr, FILE_SIZE)) { STR_SEND("rnVerify file failed!rn"); } else { STR_SEND("rnVerify file sucessed!rn"); } OSTimeDly(100); OSRemoveFileDriver(0); /* 移除设备 */ OSTimeDly(5); STR_SEND("rn请拔出USB设备!rn"); while (otgIsDeviceReady()) { OSTimeDly(OS_TICKS_PER_SEC / 50); } if (otgGetDeviceAB() == OTG_DEVICE_A) { /* 当前设备为A设备 */ otgHNPStart(); /* 启动HNP,切换主从机角色 */ } else { ucErr = otgRetControlToA(); /* 否则为B设备,归还总线控制权 */ if (ucErr == TRUE) { BEEP_ON(); OSTimeDly(OS_TICKS_PER_SEC / 2); BEEP_OFF(); } } } } /********************************************************************************************************* ** Function name: otgBServeTask ** Descriptions: otgBServe任务 ** input parameters: pvData: 没有使用 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void otgBServeTask (void *pvData) { pvData = pvData; while (1) { otgBServe(); OSTimeDly(OS_TICKS_PER_SEC / 4); } } /********************************************************************************************************* ** Function name: mainTask ** Descriptions: 主任务 ** input parameters: pvData: 没有使用 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ void mainTask (void *pvData) { pvData = pvData; BEEP_INIT(); BEEP_OFF(); otgTestInit(); OSTaskCreate(otgBServeTask, (void *)0, &GstkOTGBServeTask[sizeof(GstkOTGBServeTask) / sizeof(OS_STK) - 1], 9); while (1) { otgAServe(); OSTimeDly(OS_TICKS_PER_SEC / 4); } } /********************************************************************************************************* ** Function name: main ** Descriptions: 用户程序入口函数 ** input parameters: 无 ** output parameters: 无 ** Returned value: 无 *********************************************************************************************************/ int main (void) { SystemInit(); /* 系统初始化 */ OSInit(); OSTaskCreate(mainTask, (void *)0, &stkMainTask[sizeof(stkMainTask) / 4 - 1], 4); OSStart(); } /********************************************************************************************************* End Of File *********************************************************************************************************/ |
|
相关推荐
2 个讨论
|
|
不错,用的时候可以参考一下
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
1913个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36371 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4405 浏览 0 评论
6065 浏览 1 评论
6775 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4222 浏览 0 评论
627浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
621浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
616浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
698浏览 2评论
803浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 00:50 , Processed in 0.846781 second(s), Total 46, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号