LedTask.c 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. /**********************************************************************************
  2. * File Name: LedTask.c
  3. * Function Describe:The task for LED display
  4. * Relate Module:
  5. * Explain: 控制指示灯显示任务。在其他任务中可通过SetLedFlash函数设置显示方式
  6. * Writer: ShiLiangWen
  7. * Date: 2015.2.10
  8. **********************************************************************************/
  9. #include "includes.h"
  10. unsigned char g_ucLedSel;
  11. unsigned char g_ucLedFlash; //LED闪烁次数,每次亮0.5秒灭0.5秒
  12. unsigned char g_ucLedSleepTime; //LED熄灭时间,单位:秒
  13. static OS_STK AppLedTaskStk[APP_TASK_LED_STK_SIZE];
  14. void LedInit(void)
  15. {
  16. GPIO_InitTypeDef GPIO_InitStructure;
  17. //Configure PB.03 (JTDO) and PB.04 (JTRST) as output push-pull
  18. //在PowerCtrlInit中已经禁止JTAG-DP功能,这里不需要了。
  19. // RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//复用功能IO 时钟使能 这里必须先使能复用IO的时钟,再关闭JTAG功能
  20. // GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); // JTAG-DP Disabled and SW-DP Enabled
  21. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE);
  22. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  23. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  24. GPIO_InitStructure.GPIO_Pin = MODEM_LED1_PIN;
  25. GPIO_Init(MODEM_LED1_PORT, &GPIO_InitStructure);
  26. GPIO_InitStructure.GPIO_Pin = MODEM_LED2_PIN;
  27. GPIO_Init(MODEM_LED2_PORT, &GPIO_InitStructure);
  28. MODEM_LED1_LOW;
  29. MODEM_LED2_LOW;
  30. g_ucLedSel=LED_SEL_BLUE;
  31. }
  32. /*******************************************************************
  33. *LedTask
  34. ********************************************************************/
  35. static void AppLedTask(void *pdata)
  36. {
  37. unsigned char ucLedCt=0;
  38. static unsigned char sucLedMaxCt=0;
  39. static unsigned char sucLedFlash2=0;
  40. static unsigned char sucLastLedFlash=0xff;
  41. static unsigned char sucLastLedSleepTime=0xff;
  42. while(1)
  43. {
  44. //喂狗
  45. IWDG_ReloadCounter();
  46. if(g_ucLedFlash==0){ //长灭
  47. if(g_ucLedSel){
  48. MODEM_LED1_LOW;
  49. }else{
  50. MODEM_LED2_LOW;
  51. }
  52. continue;
  53. }else if(g_ucLedSleepTime==0){//长亮
  54. if(g_ucLedSel){
  55. MODEM_LED1_HIGH;
  56. }else{
  57. MODEM_LED2_HIGH;
  58. }
  59. continue;
  60. }
  61. if(sucLastLedFlash!=g_ucLedFlash || sucLastLedSleepTime!=g_ucLedSleepTime){
  62. ucLedCt=0;
  63. sucLastLedFlash=g_ucLedFlash;
  64. sucLastLedSleepTime=g_ucLedSleepTime;
  65. sucLedFlash2=g_ucLedFlash*2;
  66. sucLedMaxCt=sucLedFlash2+g_ucLedSleepTime*2;
  67. }
  68. if(++ucLedCt>sucLedMaxCt){
  69. ucLedCt=0;
  70. }
  71. if(ucLedCt<sucLedFlash2 && (ucLedCt&0x01)==0x01){
  72. if(g_ucLedSel){
  73. MODEM_LED1_HIGH;
  74. }else{
  75. MODEM_LED2_HIGH;
  76. }
  77. }else{
  78. if(g_ucLedSel){
  79. MODEM_LED1_LOW;
  80. }else{
  81. MODEM_LED2_LOW;
  82. }
  83. }
  84. OSTimeDlyHMSM(0, 0, 0, 200);
  85. }
  86. }
  87. /*********************************************************************
  88. *NetAppTaskCreate
  89. **********************************************************************/
  90. void LedTaskCreate(void)
  91. {
  92. CPU_INT08U os_err;
  93. LedInit();
  94. os_err = os_err; /* prevent warning... */
  95. os_err = OSTaskCreate((void (*)(void *)) AppLedTask,
  96. (void * ) 0,
  97. (OS_STK * )&AppLedTaskStk[APP_TASK_LED_STK_SIZE - 1],
  98. (INT8U ) APP_TASK_LED_PRIO );
  99. #if OS_TASK_NAME_EN > 0
  100. OSTaskNameSet(APP_TASK_NET_PRIO, "Task_Led_App", &os_err);
  101. #endif
  102. g_ucLedFlash=0; //LED闪烁次数,每次亮0.5秒灭0.5秒
  103. g_ucLedSleepTime=0; //LED熄灭时间,单位:秒
  104. }
  105. void SetLedFlash(unsigned char flash,unsigned char sleep)
  106. {
  107. int t=(flash+sleep)*2;
  108. if(t>255){
  109. return;
  110. }
  111. g_ucLedFlash=flash;
  112. g_ucLedSleepTime=sleep;
  113. }
  114. void LedSlecet(unsigned char sel)
  115. {
  116. g_ucLedSel=sel;
  117. }
  118. /***********************************************************************************/