5044|2

503

帖子

1

TA的资源

纯净的硅(初级)

楼主
 

TIVA lm4f120 DEMO qs-rgb 简单翻译 [复制链接]

由于英语很差(用谷歌 百度 翻译 +有道  各种翻译) 有的地方翻译和分析可能有错     请多多指教谢谢!
  1. //*****************************************************************************
  2. //
  3. // qs-rgb.c - Quickstart for the EK-TM4C123GXL.
  4. //
  5. // Copyright (c) 2012-2013 Texas Instruments Incorporated.  All rights reserved.
  6. // Software License Agreement
  7. //
  8. // Texas Instruments (TI) is supplying this software for use solely and
  9. // exclusively on TI's microcontroller products. The software is owned by
  10. // TI and/or its suppliers, and is protected under applicable copyright
  11. // laws. You may not combine this software with "viral" open-source
  12. // software in order to form a larger program.
  13. //
  14. // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
  15. // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
  16. // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  17. // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
  18. // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
  19. // DAMAGES, FOR ANY REASON WHATSOEVER.
  20. //
  21. // This is part of revision 1.1 of the EK-TM4C123GXL Firmware Package.
  22. //
  23. //*****************************************************************************

  24. #include //标准C库的头文件
  25. #include //布尔型的预定义宏    用到的true和false
  26. #include //数学函数库
  27. #include //
  28. #include "inc/hw_types.h"//
  29. #include "inc/hw_memmap.h"// 定义有全部片内外设在存储器里的基地址
  30. #include "inc/hw_hibernate.h"//
  31. #include "driverlib/fpu.h"//浮点单元函数库
  32. #include "driverlib/gpio.h"//GPIO函数库
  33. #include "driverlib/hibernate.h"//休眠模块驱动头文件
  34. #include "driverlib/interrupt.h"//
  35. #include "driverlib/pin_map.h"//
  36. #include "driverlib/rom.h"//rom头文件   来调用 ROM;
  37. #include "driverlib/sysctl.h"//系统设置
  38. #include "driverlib/systick.h"//
  39. #include "driverlib/uart.h"//UART函数头文件
  40. #include "utils/uartstdio.h"//
  41. #include "utils/cmdline.h"//
  42. #include "drivers/rgb.h"//rgb驱动头文件
  43. #include "drivers/buttons.h"//按键驱动头文件
  44. #include "rgb_commands.h"//
  45. #include "qs-rgb.h"//

  46. //*****************************************************************************
  47. //
  48. //! \addtogroup example_list
  49. //!

    EK-TM4C123GXL Quickstart Application (qs-rgb)


  50. //!
  51. //! A demonstration of the Tiva C Series LaunchPad (EK-TM4C123GXL)
  52. //! capabilities.
  53. //!
  54. //! Press and/or hold the left button to traverse towards the red end of the
  55. //! ROYGBIV color spectrum.  Press and/or hold the right button to traverse
  56. //! toward the violet end of the ROYGBIV color spectrum.
  57. //!
  58. //! If no input is received for 5 seconds, the application will start
  59. //! automatically changing the color displayed.
  60. //!
  61. //! Press and hold both left and right buttons for 3 seconds to enter
  62. //! hibernation.  During hibernation, the last color displayed will blink
  63. //! for 0.5 seconds every 3 seconds.
  64. //!
  65. //! The system can also be controlled via a command line provided via the UART.
  66. //! Configure your host terminal emulator for 115200, 8-N-1 to access this
  67. //! feature.
  68. //!
  69. //! - Command 'help' generates a list of commands and helpful information.
  70. //! - Command 'hib' will place the device into hibernation mode.
  71. //! - Command 'rand' will initiate the pseudo-random color sequence.
  72. //! - Command 'intensity' followed by a number between 0 and 100 will set the
  73. //! brightness of the LED as a percentage of maximum brightness.
  74. //! - Command 'rgb' followed by a six character hex value will set the color.
  75. //! For example 'rgb FF0000' will produce a red color.
  76. //
  77. //*****************************************************************************

  78. //*****************************************************************************
  79. //
  80. // Entry counter to track how int32_t to stay in certain staging states before
  81. // making transition into hibernate.
  82. // 保存   休眠模式前计数器中的数
  83. //*****************************************************************************
  84. static volatile uint32_t ui32HibModeEntryCount;

  85. //*****************************************************************************
  86. //
  87. // Array of pre-defined colors for use when buttons cause manual color steps.
  88. // 数组用于按键 变换的颜色
  89. //*****************************************************************************
  90. static float fManualColors[7] = {0.0f, .214f, .428f, .642f, .856f, 1.07f,
  91.                                  1.284f};

  92. //*****************************************************************************
  93. //
  94. // Input buffer for the command line interpreter.
  95. // 用于命令行解释输入缓冲区
  96. //*****************************************************************************
  97. static char g_cInput[APP_INPUT_BUF_SIZE];

  98. //*****************************************************************************
  99. //
  100. // Application state structure.  Gets stored to hibernate memory for
  101. // preservation across hibernate events.
  102. // 应用程序状态的结构体
  103. //*****************************************************************************
  104. volatile tAppState g_sAppState;

  105. //*****************************************************************************
  106. //
  107. // The error routine that is called if the driver library encounters an error.
  108. //
  109. //*****************************************************************************
  110. #ifdef DEBUG
  111. void
  112. __error__(char *pcFilename, uint32_t ui32Line)
  113. {
  114. }
  115. #endif


  116. //*****************************************************************************
  117. //
  118. // Handler to manage the button press events and state machine transitions
  119. // that result from those button events.
  120. //
  121. // This function is called by the SysTickIntHandler if a button event is
  122. // detected. Function will determine which button was pressed and tweak various
  123. // elements of the global state structure accordingly.
  124. //  按键处理
  125. //*****************************************************************************
  126. void
  127. AppButtonHandler(void)
  128. {
  129.     static uint32_t ui32TickCounter;

  130.     ui32TickCounter++;//记数自增()

  131.     //
  132.     // Switch statement to adjust the color wheel position based on buttons
  133.     //    按键改变颜色
  134.     switch(g_sAppState.ui32Buttons & ALL_BUTTONS)
  135.     {

  136.     case LEFT_BUTTON:

  137.         //
  138.         // Check if the button has been held int32_t enough to perform another
  139.         // color wheel increment.
  140.         // 判断按键时间满足执行自增
  141.         if((ui32TickCounter % APP_BUTTON_POLL_DIVIDER) == 0)
  142.         {
  143.             //
  144.             // Perform the increment and index wrap around.
  145.             //  执行自增
  146.             g_sAppState.ui32ManualIndex++;                 //手动按键颜色   从数组中选择的元素
  147.             if(g_sAppState.ui32ManualIndex >= APP_NUM_MANUAL_COLORS)//判断是否是最后一个颜色       在七种颜色范围内
  148.             {
  149.                 g_sAppState.ui32ManualIndex = 0;                     //第一个颜色
  150.             }
  151.             g_sAppState.fColorWheelPos = APP_PI *
  152.                                       fManualColors[g_sAppState.ui32ManualIndex];
  153.         }

  154.         //
  155.         // Reset some state counts and system mode so that we know the user
  156.         // is present and actively engaging with the application.
  157.         //
  158.         ui32HibModeEntryCount = 0;       // 模式记数清零
  159.         g_sAppState.ui32ModeTimer = 0;   // 模式时间清零
  160.         g_sAppState.ui32Mode = APP_MODE_NORMAL;//正常模式
  161.         break;

  162.     case RIGHT_BUTTON:

  163.         //
  164.         // Check if the button has been held int32_t enough to perform another
  165.         // color wheel decrement.
  166.         // 判断按键时间满足执行自减
  167.         if((ui32TickCounter % APP_BUTTON_POLL_DIVIDER) == 0)
  168.         {
  169.             //
  170.             // Perform the decrement and index wrap around.
  171.             //
  172.             if(g_sAppState.ui32ManualIndex == 0)//判断是否是第一个颜色
  173.             {
  174.                 //
  175.                 // set to one greater than the last color so that we decrement
  176.                 // back into range with next instruction.
  177.                 //
  178.                 g_sAppState.ui32ManualIndex = APP_NUM_MANUAL_COLORS;//变换为最后一个颜色
  179.             }
  180.             g_sAppState.ui32ManualIndex--;//执行自减
  181.             g_sAppState.fColorWheelPos = APP_PI *
  182.                                       fManualColors[g_sAppState.ui32ManualIndex];
  183.         }
  184.         //
  185.         // Reset some state counts and system mode so that we know the user
  186.         // is present and actively engaging with the application.
  187.         //
  188.         ui32HibModeEntryCount = 0;         //模式记数清零
  189.         g_sAppState.ui32ModeTimer = 0;     //模式时间清零
  190.         g_sAppState.ui32Mode = APP_MODE_NORMAL; //正常模式
  191.         break;

  192.     case ALL_BUTTONS:

  193.         //
  194.         // Both buttons for longer than debounce time will cause hibernation
  195.         //  判断两个按键时间  是否达到   休眠模式   (约3s)
  196.         if(ui32HibModeEntryCount < APP_HIB_BUTTON_DEBOUNCE)
  197.         {
  198.             ui32HibModeEntryCount++; //记数自增
  199.             g_sAppState.ui32Mode = APP_MODE_NORMAL;   //进入正常模式
  200.         }
  201.         else
  202.         {
  203.             g_sAppState.ui32Mode = APP_MODE_HIB;      //进入休眠模式
  204.         }
  205.         g_sAppState.ui32ModeTimer = 0;                //模式时间清零
  206.         break;

  207.     default:
  208.         if(g_sAppState.ui32Mode == APP_MODE_HIB_FLASH)
  209.         {
  210.             //
  211.             // Waking from hibernate RTC just do a quick flash then back to
  212.             // hibernation.
  213.             // RTC唤醒后  快速进入到休眠模式        休眠后led闪的哪半秒钟
  214.             if(ui32HibModeEntryCount < APP_HIB_FLASH_DURATION)
  215.             {
  216.                 ui32HibModeEntryCount++;
  217.             }
  218.             else
  219.             {
  220.                 g_sAppState.ui32Mode = APP_MODE_HIB; //进入休眠模式
  221.             }
  222.         }
  223.         else
  224.         {
  225.             //
  226.             // Normal or remote mode and no user action will cause transition
  227.             // to automatic scrolling mode.
  228.             //  经过约一两秒时间没有其他操作   进入自动模式 不包括亮度的设定
  229.             ui32HibModeEntryCount = 0;
  230.             if(g_sAppState.ui32ModeTimer < APP_AUTO_MODE_TIMEOUT)//是否达到模式作用时间
  231.             {
  232.                 g_sAppState.ui32ModeTimer++;
  233.             }
  234.             else
  235.             {
  236.                 g_sAppState.ui32Mode = APP_MODE_AUTO;//进入自动模式
  237.             }

  238.             //
  239.             // reset the tick counter when no buttons are pressed
  240.             // this makes the first button reaction speed quicker
  241.             //
  242.             ui32TickCounter = APP_BUTTON_POLL_DIVIDER - 1;//减一 为了能加快下一次按键的反应时间
  243.         }
  244.         break;
  245.     }
  246. }

  247. //*****************************************************************************
  248. //
  249. // Uses the fColorWheelPos variable to update the color mix shown on the RGB
  250. //
  251. // ui32ForceUpdate when set forces a color update even if a color change
  252. // has not been detected.  Used primarily at startup to init the color after
  253. // a hibernate.
  254. //
  255. // This function is called by the SysTickIntHandler to update the colors on
  256. // the RGB LED whenever a button or timeout event has changed the color wheel
  257. // position.  Color is determined by a series of sine functions and conditions
  258. //
  259. //*****************************************************************************
  260. void
  261. AppRainbow(uint32_t ui32ForceUpdate)
  262. {
  263.     static float fPrevPos;//暂存颜色    比较
  264.     float fCurPos;  //存储混合颜色
  265.     float fTemp;
  266.     volatile uint32_t * pui32Colors;

  267.     pui32Colors = g_sAppState.ui32Colors;//
  268.     fCurPos = g_sAppState.fColorWheelPos;//当前混合颜色值


  269.     if((fCurPos != fPrevPos) || ui32ForceUpdate)
  270.     {
  271.         //
  272.         // Preserve the new color wheel position
  273.         // 保存新的色盘的位置
  274.         fPrevPos = fCurPos;

  275.         //通过正弦函数     相位   负数二分之PI  0  二分之PI   分成   R   G    B    组合后形成混合色
  276.         // Adjust the BLUE value based on the control state
  277.         //
  278.         fTemp = 65535.0f * sinf(fCurPos);//0相位  对应绿色
  279.         if(fTemp < 0)
  280.         {
  281.             pui32Colors[GREEN] = 0;//存储到 peculiars数组中 为 rgb驱动提供参数
  282.         }
  283.         else
  284.         {
  285.             pui32Colors[GREEN] = (uint32_t) fTemp;//存储到 peculiars数组中 为 rgb驱动提供参数
  286.         }


  287.         //
  288.         // Adjust the RED value based on the control state
  289.         //
  290.         fTemp = 65535.0f * sinf(fCurPos - APP_PI / 2.0f);//负二分之PI相位  对应 蓝色
  291.         if(fTemp < 0)
  292.         {
  293.             pui32Colors[BLUE] = 0;//存储到 peculiars数组中 为 rgb驱动提供参数
  294.         }
  295.         else
  296.         {
  297.             pui32Colors[BLUE] = (uint32_t) fTemp;//存储到 peculiars数组中 为 rgb驱动提供参数
  298.         }


  299.         //
  300.         // Adjust the GREEN value based on the control state
  301.         //
  302.         if(fCurPos < APP_PI)//保证 0到1.5PI 之间都有两种颜色亮
  303.         {
  304.             fTemp = 65535.0f * sinf(fCurPos + APP_PI * 0.5f);//小于PI  相位 二分之PI 对应 红色
  305.         }
  306.         else
  307.         {
  308.             fTemp = 65535.0f * sinf(fCurPos + APP_PI);//大于PI  相位 PI  对应红色
  309.         }
  310.         if(fTemp < 0)
  311.         {
  312.             pui32Colors[RED] = 0;//存储到 peculiars数组中 为 rgb驱动提供参数
  313.         }
  314.         else
  315.         {
  316.             pui32Colors[RED] = (uint32_t) fTemp;//存储到 peculiars数组中 为 rgb驱动提供参数
  317.         }

  318.         //
  319.         // Update the actual LED state
  320.         // 更新目前LED颜色
  321.         RGBColorSet(pui32Colors);
  322.     }

  323. }

  324. //*****************************************************************************
  325. //
  326. // Called by the NVIC as a result of SysTick Timer rollover interrupt flag
  327. //
  328. // Checks buttons and calls AppButtonHandler to manage button events.
  329. // Tracks time and auto mode color stepping.  Calls AppRainbow to implement
  330. // RGB color changes.
  331. // SysTick中断处理函数
  332. //*****************************************************************************
  333. void
  334. SysTickIntHandler(void)
  335. {

  336.     static float x;

  337.     g_sAppState.ui32Buttons = ButtonsPoll(0,0);//获取按键状态
  338.     AppButtonHandler();  //处理按键函数

  339.     //
  340.     // Auto increment the color wheel if in the AUTO mode. AUTO mode is when
  341.     // device is active but user interaction has timed out.
  342.     //
  343.     if(g_sAppState.ui32Mode == APP_MODE_AUTO)//判断是否是自动模式
  344.     {
  345.         g_sAppState.fColorWheelPos += APP_AUTO_COLOR_STEP;//这个值决定七彩灯变换的细腻程度
  346.     }

  347.     //
  348.     // Provide wrap around of the control variable from 0 to 1.5 times PI
  349.     // 提供环绕的控制变量      控制g_sAppState.fColorWheelPos在   0到1.5π之间
  350.     if(g_sAppState.fColorWheelPos > (APP_PI * 1.5f))
  351.     {
  352.         g_sAppState.fColorWheelPos = 0.0f;
  353.     }
  354.     if(x < 0.0f)//没发现在那 用到变量X  
  355.     {
  356.         g_sAppState.fColorWheelPos = APP_PI * 1.5f;
  357.     }

  358.     //
  359.     //    Set the RGB Color based on current control variable value.
  360.     //
  361.     AppRainbow(0);//由于SysTick中断处理函数中   而且g_sAppState.fColorWheelPos的值还是变化的
  362.                   //出现了七彩灯变换效果

  363. }

  364. //*****************************************************************************
  365. //
  366. // Uses the fColorWheelPos variable to update the color mix shown on the RGB
  367. //
  368. // This function is called when system has decided it is time to enter
  369. // Hibernate.  This will prepare the hibernate peripheral, save the system
  370. // state and then enter hibernate mode.
  371. //   休眠处理函数
  372. //*****************************************************************************
  373. void
  374. AppHibernateEnter(void)
  375. {
  376.     //
  377.     // Alert UART command line users that we are going to hibernate
  378.     // 警报串口命令行用户, 将要休眠
  379.     UARTprintf("Entering Hibernate...\n");

  380.     //
  381.     // Prepare Hibernation Module
  382.     // 休眠模块
  383.     HibernateGPIORetentionEnable();            //使能GPIO唤醒
  384.     HibernateRTCSet(0);                        //设置时钟(RTC)计数器的初值
  385.     HibernateRTCEnable();                      //使能休眠模块的RTC
  386.     HibernateRTCMatchSet(0, 5);                //设置匹配寄存器0 的值为5
  387.     HibernateWakeSet(HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC);//唤醒模式      引脚唤醒和RTC唤醒

  388.     //
  389.     // Store state information to battery backed memory
  390.     // since sizeof returns number of bytes we convert to words and force
  391.     // a rounding up to next whole word.
  392.     //             将要存储到休眠模块中的存储器                     存储的32位字的计数
  393.     HibernateDataSet((uint32_t*)&g_sAppState, sizeof(tAppState)/4+1);//把数据存储在休眠模块的非易失性存储器中

  394.     //
  395.     // Disable the LED for 100 milliseconds to let user know we are
  396.     // ready for hibernate and will hibernate on relase of buttons
  397.     //禁用LED 100毫秒来让用户知道将要休眠,在释放按钮休眠
  398.     RGBDisable();    //禁止 RGB
  399.     SysCtlDelay(SysCtlClockGet()/3/10);//延时一段时间     延时长度=3*系统时钟速率*系统时钟周期
  400.     RGBEnable();     //使能RGB

  401.     //
  402.     // Wait for wake button to be released prior to going into hibernate
  403.     //等待唤醒按钮被释放之前进入休眠
  404.     while(g_sAppState.ui32Buttons & RIGHT_BUTTON)
  405.     {
  406.         //
  407.         //Delay for about 300 clock ticks to allow time for interrupts to
  408.         //sense that button is released
  409.         //延时约300个时钟
  410.         SysCtlDelay(100);
  411.     }

  412.     //
  413.     // Disable the LED for power savings and go to hibernate mode
  414.     //  禁用LED节能和进入休眠模式
  415.     RGBDisable();         //禁止RGB
  416.     HibernateRequest();   //启动休眠模式


  417. }

  418. //*****************************************************************************
  419. //
  420. // Configure the UART and its pins.  This must be called before UARTprintf().
  421. //  配置串口     必须在UARTprintf()函数之前
  422. //*****************************************************************************
  423. void
  424. ConfigureUART(void)
  425. {
  426.     //
  427.     // Enable the GPIO Peripheral used by the UART.
  428.     //  使能GPIOA
  429.     ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

  430.     //
  431.     // Enable UART0
  432.     // 使能    UART0
  433.     ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

  434.     //
  435.     // Configure GPIO Pins for UART mode.
  436.     //GPIO引脚配置异步模式
  437.     ROM_GPIOPinConfigure(GPIO_PA0_U0RX);  //配置GPIO引脚的复用功能
  438.     ROM_GPIOPinConfigure(GPIO_PA1_U0TX);  //配置GPIO引脚的复用功能
  439.     ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);//配置管脚供UART外设使用

  440.     //
  441.     // Use the internal 16MHz oscillator as the UART clock source.
  442.     //使用内部16M晶振作为   UART 时钟源
  443.     UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);//设置指定的UART波特率时钟源
  444.     //                 UART0地址             内部精密时钟源    还可选   UART_CLOCK_SYSTEM  系统时钟源
  445.     //
  446.     // Initialize the UART for console I/O.
  447.     //初始化 UART的I/O
  448.     UARTStdioConfig(0, 115200, 16000000);//配置UART (UART0,波特率115200,晶振频率16M)
  449. }

  450. //*****************************************************************************
  451. //
  452. // Main function performs init and manages system.
  453. //
  454. // Called automatically after the system and compiler pre-init sequences.
  455. // Performs system init calls, restores state from hibernate if needed and
  456. // then manages the application context duties of the system.
  457. //
  458. //*****************************************************************************
  459. int
  460. main(void)
  461. {
  462.     uint32_t ui32Status;        //中断状态
  463.     uint32_t ui32ResetCause;    //复位原因
  464.     int32_t i32CommandStatus;   //命令状态

  465.     //
  466.     // Enable stacking for interrupt handlers.  This allows floating-point
  467.     // instructions to be used within interrupt handlers, but at the expense of
  468.     // extra stack usage.
  469.     //
  470.     ROM_FPUEnable();         //使能浮点运算单元
  471.     ROM_FPUStackingEnable(); //使能浮点堆寄存器

  472.     //
  473.     // Set the system clock to run at 40Mhz off PLL with external crystal as
  474.     // reference.        经五分频为40M  固定二分频后到200M
  475.     //系统时钟配置                        系统5分频            使用pll(倍频到400M) 外置晶振频率 (驱动pll)     时钟源主时钟
  476.     ROM_SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ |
  477.                        SYSCTL_OSC_MAIN);

  478.     //
  479.     // Enable the hibernate module
  480.     // 使能外设                                           低功耗休眠模式
  481.     SysCtlPeripheralEnable(SYSCTL_PERIPH_HIBERNATE);

  482.     //
  483.     // Enable and Initialize the UART.
  484.     // 使能    初始化 UART
  485.     ConfigureUART();
  486.     //串口输出
  487.     UARTprintf("Welcome to the Tiva C Series TM4C123G LaunchPad!\n");
  488.     UARTprintf("Type 'help' for a list of commands\n");
  489.     UARTprintf("> ");

  490.     //
  491.     // Determine why system reset occurred and respond accordingly.
  492.     // 确定为什么系统复位发生并作出相应的反应
  493.     ui32ResetCause = SysCtlResetCauseGet(); //获取一个复位原因    (LDO 软件。看门狗。 掉电 。上电。 外部)
  494.     SysCtlResetCauseClear(ui32ResetCause);  //清除复位原因     清除的也是 (LDO 软件。看门狗。 掉电 。上电。 外部) 让程序继续执行
  495.     if(ui32ResetCause == SYSCTL_CAUSE_POR)  //判断是否是上电复位
  496.     {
  497.         if(HibernateIsActive())//查看休眠模块是否已被激活            是返回true      否返回false   从而根据结果采取适当的操作
  498.         {                      //如果冬眠模式已激活,那就无需再次使能休眠模块。。在上电复位时调用此函数可以帮助确定复位是否由于从冬眠中唤醒或者是一个冷启动而导致的
  499.             //
  500.             // Read the status bits to see what caused the wake.
  501.             // 读取状态是什么引起的唤醒
  502.             ui32Status = HibernateIntStatus(0); //获取休眠模块的当前中断情形       (获取原始的中断状态时为False,获取被屏蔽的中断状态时为True)
  503.             HibernateIntClear(ui32Status);   //清除冬眠模块中正在挂起的中断

  504.             //
  505.             // Wake was due to the push button.
  506.             //
  507.             if(ui32Status & HIBERNATE_INT_PIN_WAKE)   //是否是从/WAKE管脚触发中断
  508.             {
  509.                 UARTprintf("Hibernate Wake Pin Wake Event\n");
  510.                 UARTprintf("> ");

  511.                 //
  512.                 // Recover the application state variables from battery backed
  513.                 // hibernate memory.  Set ui32Mode to normal.
  514.                 //             从休眠模块存储器中读出的数据将要保存的位置
  515.                 HibernateDataGet((uint32_t*) &g_sAppState,
  516.                                  sizeof(tAppState) / 4 + 1);//从冬眠模块的非易失性存储器中读取一组数据
  517.                 g_sAppState.ui32Mode = APP_MODE_NORMAL;     //正常模式
  518.             }

  519.             //
  520.             // Wake was due to RTC match
  521.             //  RTC唤醒
  522.             else if(ui32Status & HIBERNATE_INT_RTC_MATCH_0)//是否是  RTC匹配0中断
  523.             {
  524.                 UARTprintf("Hibernate RTC Wake Event\n");
  525.                 UARTprintf("> ");
  526.                 //
  527.                 // Recover the application state variables from battery backed
  528.                 // hibernate memory. Set ui32Mode to briefly flash the RGB.
  529.                 //          从休眠模块存储器中读出的数据将要保存的位置      、读取的32位字的计数值
  530.                 HibernateDataGet((uint32_t*) &g_sAppState,
  531.                                 sizeof(tAppState) / 4 + 1);//从冬眠模块的非易失性存储器中读取一组数据
  532.                 g_sAppState.ui32Mode = APP_MODE_HIB_FLASH; // 再次进入休眠模式
  533.             }
  534.         }

  535.         else
  536.         {
  537.             //
  538.             // Reset was do to a cold first time power up.
  539.             //
  540.             UARTprintf("Power on reset. Hibernate not active.\n");
  541.             UARTprintf("> ");

  542.             g_sAppState.ui32Mode = APP_MODE_NORMAL;            //正常模式
  543.             g_sAppState.fColorWheelPos = 0;                    //RGB混合颜色 (都不亮)
  544.             g_sAppState.fIntensity = APP_INTENSITY_DEFAULT;    //LED亮度默认值
  545.             g_sAppState.ui32Buttons = 0;                       //按键状态清零
  546.         }
  547.     }
  548.     else
  549.     {
  550.         //
  551.         // External Pin reset or other reset event occured.
  552.         // 外部引脚复位或者其他复位
  553.         UARTprintf("External or other reset\n");
  554.         UARTprintf("> ");

  555.         //
  556.         // Treat this as a cold power up reset without restore from hibernate.
  557.         //
  558.         g_sAppState.ui32Mode = APP_MODE_NORMAL;         //正常模式
  559.         g_sAppState.fColorWheelPos = APP_PI;            //RGB的混合颜色
  560.         g_sAppState.fIntensity = APP_INTENSITY_DEFAULT; //LED亮度默认值
  561.         g_sAppState.ui32Buttons = 0;                    //按键状态清零

  562.     //
  563.         // colors get a default initialization later when we call AppRainbow.
  564.         //
  565.     }

  566.     // 初始化休眠模块的时钟
  567.     // Initialize clocking for the Hibernate module
  568.     // 使能冬眠模块的操作
  569.     HibernateEnableExpClk(SysCtlClockGet());//为系统时钟提供休眠模块的时钟速率

  570.     //
  571.     // Initialize the RGB LED. AppRainbow typically only called from interrupt
  572.     // context. Safe to call here to force initial color update because
  573.     // interrupts are not yet enabled.
  574.     //
  575.     RGBInit(0);//RGB初始化              ( 使能定时器      GPIO  访问硬件寄存器)
  576.     RGBIntensitySet(g_sAppState.fIntensity);//LED亮度设置
  577.     AppRainbow(1);
  578.     RGBEnable();   //RGB使能     即配置GPIO 定时器

  579.     //
  580.     // Initialize the buttons
  581.     //按键初始化
  582.     ButtonsInit();

  583.     //
  584.     // Initialize the SysTick interrupt to process colors and buttons.
  585.     // 初始化系统定时器中断处理的色彩和按钮
  586.     SysTickPeriodSet(SysCtlClockGet() / APP_SYSTICKS_PER_SEC);//设置SysTick计数器的周期值     初值   系统时钟速率/32
  587.     SysTickEnable();   //使能SysTick 计数器
  588.     SysTickIntEnable();//使能 SysTick 中断。
  589.     IntMasterEnable(); //使能处理器中断

  590.     //
  591.     // spin forever and wait for carriage returns or state changes.
  592.     //
  593.     while(1)
  594.     {

  595.         UARTprintf("\n>");


  596.         //
  597.         // Peek to see if a full command is ready for processing
  598.         //查看是否完整的命令准备处理
  599.         while(UARTPeek('\r') == -1)
  600.         {
  601.             //
  602.             // millisecond delay.  A SysCtlSleep() here would also be OK.
  603.             // 毫秒延时。
  604.             SysCtlDelay(SysCtlClockGet() / (1000 / 3));//延时长度=3*系统时钟速率*系统时钟周期

  605.             //
  606.             // Check for change of mode and enter hibernate if requested.
  607.             // all other mode changes handled in interrupt context.
  608.             //
  609.             if(g_sAppState.ui32Mode == APP_MODE_HIB)//判断是否是休眠模式
  610.             {
  611.                 AppHibernateEnter();//进入休眠函数
  612.             }
  613.         }

  614.         //
  615.         // a '\r' was detected get the line of text from the user.
  616.         //  检测获得的字符
  617.         UARTgets(g_cInput,sizeof(g_cInput));

  618.         //
  619.         // Pass the line from the user to the command processor.
  620.         // It will be parsed and valid commands executed.
  621.         // UART输入的命令进行处理
  622.         i32CommandStatus = CmdLineProcess(g_cInput);

  623.         //
  624.         // Handle the case of bad command.
  625.         //
  626.         if(i32CommandStatus == CMDLINE_BAD_CMD)//判断是否是错误命令
  627.         {
  628.             UARTprintf("Bad command!\n");
  629.         }

  630.         //
  631.         // Handle the case of too many arguments.
  632.         // 处理参数太多的情况下
  633.         else if(i32CommandStatus == CMDLINE_TOO_MANY_ARGS)//判断是否命令过多
  634.         {
  635.             UARTprintf("Too many arguments for command processor!\n");
  636.         }
  637.     }
  638. }
复制代码

最新回复

这个程序在CCS上怎么过不去啊?是机器速度太慢了还是什么原因? 编译卡在7%  'Invoking: ARM Compiler'等了N久过不去。 [ 本帖最后由 awficel1 于 2013-11-23 18:13 编辑 ]  详情 回复 发表于 2013-11-23 18:10
 
点赞 关注

回复
举报

124

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
这个程序在CCS上怎么过不去啊?是机器速度太慢了还是什么原因?
编译卡在7%  'Invoking: ARM Compiler'等了N久过不去。

[ 本帖最后由 awficel1 于 2013-11-23 18:13 编辑 ]

点评

导入整个工程试试 在ti\\TivaWare_C_Series-1.1\\examples\\boards\\ek-tm4c123gxl\\qs-rgb 应该很好通过的!  详情 回复 发表于 2013-11-24 09:02
 
 

回复

503

帖子

1

TA的资源

纯净的硅(初级)

板凳
 

回复 沙发awficel1 的帖子

导入整个工程试试 在ti\TivaWare_C_Series-1.1\examples\boards\ek-tm4c123gxl\qs-rgb
应该很好通过的!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表