zoukankan      html  css  js  c++  java
  • LED事件

    在CSR8670中,PIO口被映射到一个寄存器中,寄存器中的每一位代表着一个PIO口,比如:我们想让PIO1口为led1,PIO2口为led2,则:

    #define LED1 	 0x01    	/* bit 1 */
    
    #define LED2 	 0x02    	/* bit 2 */
    

    然后使用PioSetDir32函数将PIO口设置为output,在通过PioSet32函数来设置led的点亮/熄灭。

    下面程序可以实现简单的led1和led2的交替闪烁:

    #include <message.h>
    #include <pio.h>		/* Peripheral Input/Output */
    
    #define LED1 	 0x01    	/* bit 1 */
    #define DELAY1   200 		/* ms */
    
    #define LED2     0x02 		/* bit 2 */
    #define DELAY2   400 		/* ms */
    
    static void led_controller1( Task t, MessageId id, Message payload )
    {
    	PioSet32( LED1, (PioGet32() ^ LED1) );
    	MessageSendLater( t, 0, 0, DELAY1 );
    }
    
    static void led_controller2( Task t, MessageId id, Message payload )
    {
    	PioSet32( LED2, (PioGet32() ^ LED2) );
    	MessageSendLater( t, 0, 0, DELAY2 );
    }
    
    static TaskData led_controller1_task = { led_controller1 };
    static TaskData led_controller2_task = { led_controller2 };
    
    
    int main(void)
    {
    	PioSetDir32(0xFF, 0xFF);         /* Set all PIO to be output */
    	PioSet32(0xFF, 0);               /* Set all PIO off (0) */
    	
    	MessageSend( &led_controller1_task, 0 , 0 );
    	MessageSend( &led_controller2_task, 0 , 0 );
    	MessageLoop();
    	
    	return 0;
    }
    

    当我们需要led表现出复杂的动作时,上述编写代码就显得臃肿和繁琐,为此,CSR提供了ledparse.exe工具来解析一个可以用来自定义led动作的.led文件,我们可以将我们想要led表现的动作写在.led文件中,比如:我们想实现led1 ~ led4的跑马灯效果,则我们只需编写这样一个example.led文件即可,

    // An example LED file
    
    // 'led' is used to define the dedicated output LED that are available on certain
    // BlueCore Variants. 
    
    // 'pio' is used for controlling standard pio lines.
    
    #ifdef BC5_MODULE
    led 0 LED2
    led 1 LED1
    
    pio 0 LED3
    pio 1 LED4
    #else
    pio 0 LED1
    pio 1 LED2
    pio 2 LED3
    pio 3 LED4
    #endif
    
    // Flash each LED, one after the other.
    pattern PATTERN1 RPT
        LED1 ON  200
        LED1 OFF 0
        LED2 ON  200
        LED2 OFF 0
        LED3 ON  200
        LED3 OFF 0
        LED4 ON  200
        LED4 OFF 0
    
    // Flash alternate pairs
    pattern PATTERN2 RPT
        LED1 LED3 ON  200
        LED1 LED3 OFF 0
        LED2 LED4 ON  200
        LED2 LED4 OFF 0
    

    然后通过ledparse.exe工具对其进行解析:

    ledparse example.led example
    

    即可生成example.c和example.h代码文件,我们在主文件中引用example.h文件即可:

    #include <message.h>
    #include <charger.h>
    #include <pio.h>                /* Peripheral Input/Output */
    #include <print.h>              /* debug PRINT */
    
    #include "example.h"
    
    #define DELAY 5000
    #define NO_OF_PATTERNS  (2)
    
    uint8 patterns[] = { PATTERN1, PATTERN2};
    uint8 count;
    
    static void led_controller1( Task t, MessageId id, Message payload )
    {
        PRINT(("Pattern No. %d
    ", count ));
        
        ledsPlay( patterns[count] );
    
        count++;
        count %= NO_OF_PATTERNS;
        
        MessageSendLater( t, 0, 0, DELAY );
    }
    
    static TaskData led_controller1_task = { led_controller1 };
    
    int main(void)
    {
    #if BC5_MODULE
        /* Prevent the LED0 flashing during charging */
        ChargerConfigure(CHARGER_SUPPRESS_LED0, 1);
    #endif
        
        MessageSend( &led_controller1_task, 0 , 0 );
        MessageLoop();
        
        return 0;
    }
    

    至此一个led的跑马灯效果就出来了,同时led文件还定义了另一个led动作。

  • 相关阅读:
    Dell Optiplex 330上Windows 7激活方法与工具
    了解控制器、控制器操作和操作结果
    [转]为C# Windows服务添加安装程序
    前段时间晚上回家不想看电视了,就做了个网站
    MSSQL 2008里事务的一个问题
    关于JavaScript解析XML的性能的问题(已解决)
    自己做了一个教育的网站
    Windows 7下安装SQL Server 2005过程详解
    (转)C#学习基础概念二十五问
    了解模型、视图和控制器
  • 原文地址:https://www.cnblogs.com/fingertouch/p/4591716.html
Copyright © 2011-2022 走看看