初版
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
#include "ir_encoder.h"
|
||||
#include "ir_decoder.h"
|
||||
#include "clock.h"
|
||||
#include "gpio.h"
|
||||
#include "debug.h"
|
||||
#include "gptimer.h"
|
||||
|
||||
extern void wdt_clear();
|
||||
|
||||
void ir_encoder_demo()
|
||||
{
|
||||
printf("ir_encoder_demo()\n");
|
||||
ir_encoder_init(IO_PORTA_01, 38000, 3000); //红外信号输出IO_PORTA_00, 频率38000, 占空比30.00%
|
||||
/* ir_encoder_init(IO_PORTA_00, 38000, 10000); //红外信号输出IO_PORTA_00, 频率38000, 占空比100.00% */
|
||||
|
||||
u8 addr = 0x4c; //设置红外地址 0x4c
|
||||
u8 cmd = 0x4a; //设置红外命令 0x4a
|
||||
u8 repeat_en = 1; //重复发送使能
|
||||
ir_encoder_tx(addr, cmd, repeat_en);
|
||||
udelay(2 * 1000 * 1000);
|
||||
ir_encoder_repeat_stop(); //停止发送
|
||||
gptimer_dump();
|
||||
while (1) {
|
||||
wdt_clear();
|
||||
}
|
||||
}
|
||||
|
||||
const struct gptimer_config ir_decode_config = {
|
||||
.capture.filter = 0,//38000,
|
||||
.capture.max_period = 110 * 1000, //110ms
|
||||
.capture.port = PORTC,
|
||||
.capture.pin = BIT(4),
|
||||
.irq_cb = NULL,
|
||||
.irq_priority = 3,
|
||||
//根据红外模块的 idle 电平状态,选择边沿触发方式
|
||||
/* .mode = GPTIMER_MODE_CAPTURE_EDGE_FALL, */
|
||||
.mode = GPTIMER_MODE_CAPTURE_EDGE_RISE,
|
||||
};
|
||||
void ir_decoder_demo()
|
||||
{
|
||||
printf("ir_decoder_demo()\n");
|
||||
ir_decoder_init(&ir_decode_config); //红外信号接收IO_PORTA_O1
|
||||
u32 ir_key; //接收到的红外码
|
||||
while (1) {
|
||||
ir_key = ir_decoder_get_data();
|
||||
if (ir_key != (u32) - 1) {
|
||||
printf("ir_key:0x%x\n", ir_key);
|
||||
}
|
||||
udelay(5 * 100 * 1000);
|
||||
wdt_clear();
|
||||
}
|
||||
}
|
||||
|
||||
void ir_encoder_decoder_demo()
|
||||
{
|
||||
printf("ir_encoder_decoder_demo()\n");
|
||||
//设置红外发送
|
||||
u8 addr = 0;
|
||||
u8 cmd = 0x80;
|
||||
u8 repeat_en = 0;
|
||||
ir_encoder_init(IO_PORTC_03, 38000, 3000); //红外信号输出IO_PORTA_00, 频率38000, 占空比30.00%
|
||||
/* ir_encoder_init(IO_PORTC_03, 38000, 10000); //红外信号输出IO_PORTA_00, 频率0, 占空比100.00% */
|
||||
|
||||
//设置红外接收
|
||||
ir_decoder_init(&ir_decode_config); //红外信号接收IO_PORTA_O1
|
||||
|
||||
u32 ir_key; //接收到的红外码
|
||||
u32 time_cnt = 0;
|
||||
while (1) {
|
||||
ir_key = ir_decoder_get_data(); //NEC数据排列格式:(命令反码 + 命令码 + 地址反码 +地址码)
|
||||
//提供以下接口使用, 获取接口每调用一次,内部接收到的数据会清掉
|
||||
/* u32 ir_cmd = ir_decoder_get_command_value(); */
|
||||
/* u32 ir_cmd = ir_decoder_get_command_value_uncheck(); */
|
||||
/* u32 ir_addr = ir_decoder_get_address_value(); */
|
||||
/* u32 ir_addr = ir_decoder_get_address_value_uncheck(); */
|
||||
if (ir_key != (u32) - 1) {
|
||||
printf("ir_key:0x%x\n", ir_key);
|
||||
}
|
||||
if (time_cnt % 2) {
|
||||
ir_encoder_tx(addr, cmd, repeat_en);
|
||||
addr++;
|
||||
cmd++;
|
||||
}
|
||||
time_cnt++;
|
||||
udelay(1 * 1000 * 1000);
|
||||
wdt_clear();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user