📄 led.c
字号:
#include <linux/sched.h>#include <linux/interrupt.h>#include <linux/init.h>#include <linux/delay.h>#include "fr400pdk2_board.h"#define clear_psr_et() \ ({ \ unsigned long temp; \ __asm__ __volatile__( \" movsg psr, %0 /* psr.et=0 */\n" \" andi %0,#~0x1,%0\n" \" movgs %0,psr" \ : "=r" (temp) \ : \ : "memory"); \ })#define ON_HEARTBEAT#ifdef ON_HEARTBEATstatic void heartbeat_handler(unsigned long dev_addr);static struct timer_list led_hearbeat = { {NULL, NULL}, 0UL, 0UL, heartbeat_handler};static unsigned long led_last[2] = {0,0};#define LED_RED 0#define LED_GREEN 1void __fr400pda_led_init(void){ unsigned flags; save_flags_cli(flags); led_last[LED_RED] =0; restore_flags(flags);}static void heartbeat_handler(unsigned long dev_addr){ static unsigned short s=0; s++;#define HEARTBEAT_SPEED 0 if(s%(1<<HEARTBEAT_SPEED)==0){ int pos; short bits; pos=(s>>HEARTBEAT_SPEED)&0x0f; bits=((1<<pos)|(1<<(15-pos)))&0x7f; write_fr400pda_register_u16(0x20000022,bits); } mod_timer(&led_hearbeat, jiffies + HZ / 10);}/*BASIC_SOFT@FUJITSU MOD*/static void __init led_heartbeat_init(void){ init_timer(&led_hearbeat); led_hearbeat.expires = jiffies + HZ / 10; led_hearbeat.function = heartbeat_handler; add_timer(&led_hearbeat);}static int __init fr400pda_led_init(void){ __fr400pda_led_init(); led_heartbeat_init(); printk("FR400PDK2_BOARD LED\n"); return 0;}__initcall(fr400pda_led_init);#endif /* ON_HEARTBEAT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -