查看: 2366|回复: 1

[分享] [交流][下载]K20 Software Framework 驱动库

[复制链接]

该用户从未签到

1

主题

7

帖子

0

新手上路

Rank: 1

积分
16
最后登录
1970-1-1
发表于 2013-1-29 00:02:54 | 显示全部楼层 |阅读模式
一个正在完善中的Software Framework,基于K20,对官方提供的头文件进行优化扩充,并提供高度抽象的接口函数,现在已经可以使用的驱动有GPIO,FLASH,SPI,ADC和USART。提供一个状态机调度器,并附有详细例程。
另外:内附彩蛋若干~有意者可以慢慢探索(比如AES,EzPort……)。
参考工程在application目录的template文件夹下,IAR工程文件路径:\application\template\build_iar
简单的LED闪烁代码
/*----------------------------------------------------------------------------*
 * State machine: LED Flash                                                   *
 *----------------------------------------------------------------------------*/
/*! \brief initialize work led
 */
PRIVATE STATE(LED_Init) BEGIN
    //! gpio initialization
    ESSF_GPIO_INIT(LED_WORK_PORT);
    ESSF_GPIO_ENABLE(LED_WORK_PORT);
    ESSF_GPIO_PIN_CONFIG(LED_WORK_PIN, PIN_FUNC_GPIO, PIN_OUTPUT);
   
    //! transfer to next state
    TRANSFER_TO_STATE(LED_Toggle);
    EXIT_STATE;
END
/*! \brief toggle led and set delay down counter
 */
PRIVATE STATE(LED_Toggle) BEGIN   
    //! toggle work led
    ESSF_GPIO_TOGGLE(LED_WORK_PIN);
    //! initialize delay down counter
    s_hwLEDDelay = 10000;
    //! transfer to next state
    TRANSFER_TO_STATE(LED_Delay);
    EXIT_STATE;
END

/*! \brief delay
 */
PRIVATE STATE(LED_Delay) BEGIN
    if (s_hwLEDDelay) {
        s_hwLEDDelay--;
    } else {
        //! transfer to state: Output String
        TRANSFER_TO_STATE(LED_Toggle);
    }
  
    REFLEXIVE_STATE;
END
 
读取系统温度的代码
  1. /*----------------------------------------------------------------------------*
  2.  * State machine: Read Temprature                                             *
  3.  *----------------------------------------------------------------------------*/
  4. /*! \brief initialize adc, calibrate temperature channel and start first
  5.  *!        conversion
  6.  */
  7. PRIVATE STATE(ADC_Init) BEGIN
  8.    
  9.     //! initiliaze adc
  10.     ESSF_ADC_INIT(ESSF_ADC0);            
  11.     //! configure adc0
  12.     ESSF_ADC
  13.         ADC_P_CLK,                  //!< clock source: peripheral clock
  14.         ADC_VREF_VREF_PIN,          //!< reference: extern Vrefh/Vrefl
  15.         ADC_PRESCALE_DIV8,          //!< prescaler : div8
  16.         //! \name adc work mode
  17.         //! @{
  18.         //ADC_SW_TRIGGER      |     //!< software trigger mode (default)
  19.         //ADC_SINGLE_SAMPLE   |     //!< single sample mode (default)
  20.         ADC_16BIT_MODE      |       //!< 16bit mode
  21.         ADC_LONG_SAMP_20CLK |       //!< long sample mode with extra 20 ADCLK
  22.         ADC_HW_AVERAGE_32           //!< hardware average 32 samples
  23.         //! @}
  24.     ESSF_END_ADC(ESSF_ADC0);
  25.     //! enable ADC
  26.     ESSF_ADC_ENABLE(ESSF_ADC0);
  27.     //! calibration
  28.     ESSF_ADC_CHN_CALIB(ESSF_ADC0, ADC_CHN_TEMP);
  29.     //! start adc sample: temperature sensor
  30.     ESSF_ADC_START(ESSF_ADC0, ADC_CHN_TEMP);
  31.     //! transfer to next state
  32.     TRANSFER_TO_STATE(Wait_ADC_Result);
  33.     EXIT_STATE;
  34. END
  35. /*! \brief wait adc conversion complete
  36.  */
  37. PRIVATE STATE(Wait_ADC_Result) BEGIN
  38.    
  39.     //! wait adc ready
  40.     if (ESSF_ADC_IS_READY(ESSF_ADC0, ADC_CHN_TEMP)) {
  41.         TRANSFER_TO_STATE(Calculate_Temprature);
  42.     }
  43.     REFLEXIVE_STATE;
  44. END
  45. /*! \brief get adc conversion result and calculate chip temperature in 0.1K
  46.  */
  47. PRIVATE STATE(Calculate_Temprature) BEGIN
  48.    
  49.     //! get adc result
  50.     int32_t lADCResult = ESSF_ADC_GET_RESULT(ESSF_ADC0, ADC_CHN_TEMP);
  51.     //! start adc sample: temperature sensor
  52.     ESSF_ADC_START(ESSF_ADC0, ADC_CHN_TEMP);
  53.     /* ---------------- temperature calculation body begin ----------------- */
  54.     lADCResult = (lADCResult * 33000) >> 16;
  55.     int32_t iResult = ((lADCResult - 7190) * 1000 / 1715);
  56.     //! update system temperature
  57.     SAFE_ATOM_CODE (
  58.         s_hwSystemTemperature = (250 + 2731) - (vsf_uint16_t)iResult;
  59.     )
  60.     /* ---------------- temperature calculation body end ------------------- */
  61.    
  62.     //! transfer to next state
  63.     //TRANSFER_TO_STATE(Wait_ADC_Result);
  64.    
  65.     CALL_FSM_EX(    REF_STATE(Temperature_Output_String), NULL,
  66.                     REF_STATE(Wait_ADC_Result), pArg
  67.                 );
  68.     EXIT_STATE;
  69. END
  70. static vsf_uint16_t get_system_temperature(void)
  71. {
  72.     vsf_uint16_t tResult;
  73.     SAFE_ATOM_CODE(
  74.         tResult = s_hwSystemTemperature;
  75.     )
  76.     return tResult;
  77. }
  78.  
复制代码
 
不用怀疑,以上代码都是ANSI-C代码,任何编译器均支持。

ESSF_Freescale_K20_v3_5.rar

879.79 KB, 下载次数: 48, 下载积分: 威望 1

回复

使用道具 举报

该用户从未签到

0

主题

4

帖子

0

新手上路

Rank: 1

积分
4
最后登录
1970-1-1
发表于 2013-3-6 17:56:43 | 显示全部楼层

回复:[交流][下载]K20 Software Framework 驱动库

 好資料~學習中~謝謝大大分享囉~~^^
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 05:54 , Processed in 0.080294 second(s), 21 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表