From fcfd4792f9b892902ede814774fa9e952c842a9c Mon Sep 17 00:00:00 2001 From: Telekatz Date: Sun, 16 Jul 2017 22:36:47 +0200 Subject: [PATCH] Change all IR protocols to hardware PWM --- boop/betty.cfg | 4 ++-- boop/boop_rom.bin | Bin 267281 -> 267729 bytes boop/infrared/infrared.c | 6 ++++++ boop/infrared/infrared.h | 3 ++- boop/infrared/infraredirq.c | 35 +---------------------------------- boop/infrared/ir_itt.c | 1 + boop/infrared/ir_lirc.c | 1 - boop/infrared/ir_nrc17.c | 1 + boop/infrared/ir_rc5.c | 1 + boop/infrared/ir_rc6.c | 1 + boop/infrared/ir_rca.c | 1 + boop/infrared/ir_rcmm.c | 1 + boop/infrared/ir_rec80.c | 1 + boop/infrared/ir_recs80.c | 1 + boop/infrared/ir_sirc.c | 2 ++ boop/infrared/ir_spaceenc.c | 1 + 16 files changed, 22 insertions(+), 38 deletions(-) diff --git a/boop/betty.cfg b/boop/betty.cfg index b467c7c..ba49750 100644 --- a/boop/betty.cfg +++ b/boop/betty.cfg @@ -71,9 +71,9 @@ proc betty_init { } { # Memory Bank Configuration # BCFG0: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 0 @ 0x80000000 - mww 0xffe00000 0x10000420 + mww 0xffe00000 0x10001CA0 # BCFG2: 16bit, rble, 2wst - 30 mhz : Betty: FLASH 1 @ 0x82000000 - mww 0xffe00008 0x10000420 + mww 0xffe00008 0x10001CA0 # BCFG1: 8 bit, 3 sram wst, rble, 5 wst 3 idcy : Betty: LCD @ 0x81000000 mww 0xffe00004 0x00000400 diff --git a/boop/boop_rom.bin b/boop/boop_rom.bin index 3c0bdbf047a66af3db836544619547d293f5fb4c..d799393c157877a7703b7217b40614527e9e134a 100644 GIT binary patch delta 21213 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 I&2Cu!ANc*fg8%>k delta 20797 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 diff --git a/boop/infrared/infrared.c b/boop/infrared/infrared.c index 02f3d25..5e3aa45 100644 --- a/boop/infrared/infrared.c +++ b/boop/infrared/infrared.c @@ -114,6 +114,12 @@ void runIR(void) } +void setIRspeed(struct irModule module) +{ + PWM_set_frequency(15000000 / (module.tval * module.lo_border)); + ir.duty_cycle =(module.hi_border * 100) / module.lo_border; +} + void stopIR(void) { T1TCR = 0x03; diff --git a/boop/infrared/infrared.h b/boop/infrared/infrared.h index b5f00a2..4e5665a 100644 --- a/boop/infrared/infrared.h +++ b/boop/infrared/infrared.h @@ -78,7 +78,7 @@ struct IR_VARS_ { //#define setIRspeed( _m ) { if(sysInfo & 0x80) T1MR0 = _m.tval1; else T1MR0 = _m.tval; } -#define setIRspeed( _m ) { T1MR0 = _m.tval; } +//#define setIRspeed( _m ) { T1MR0 = _m.tval; } void __attribute__ ((section(".text.fastcode"))) defIR(void); void defSender(unsigned long cmd); @@ -90,6 +90,7 @@ void startIrIRQ(void); void setIR(struct irModule module); void runIR(void); void stopIR(void); +void setIRspeed(struct irModule module); unsigned long setEncoder( unsigned char _x, unsigned char _y ); diff --git a/boop/infrared/infraredirq.c b/boop/infrared/infraredirq.c index 4430bf5..2ae58f8 100644 --- a/boop/infrared/infraredirq.c +++ b/boop/infrared/infraredirq.c @@ -25,8 +25,6 @@ #include "cc1100.h" #include "pwm.h" -static unsigned int c_cnt = 0; -static unsigned int b_len = 0; extern volatile unsigned char mod_enable; extern volatile unsigned char hi_border; extern volatile unsigned char lo_border; @@ -36,7 +34,6 @@ extern ir_fn irEncoder; void __attribute__ ((section(".text.fastcode"))) irIRQ(void) { - c_cnt++; irEncoder(); @@ -46,36 +43,6 @@ void __attribute__ ((section(".text.fastcode"))) irIRQ(void) PWM_set_IR_duty_cycle(0); } - - /* - if(c_cnt <= hi_border) - { - FIOSET0 = (mod_enable<<21); - } - else - { - FIOCLR0 = (1<<21); - if(c_cnt >= lo_border) - { - c_cnt = 0; - b_len++; - if(b_len >= cycles) - { - irEncoder(); - b_len = 0; - - if(!hi_border) { //RF mode - if(mod_enable) - FIOCLR0 = GDO0; - else - FIOSET0 = GDO0; - } - } - } - } -*/ - //T1TCR = 0x03; - T1IR = 1; -// VICVectAddr = 0; + } diff --git a/boop/infrared/ir_itt.c b/boop/infrared/ir_itt.c index 6294cc4..1156947 100644 --- a/boop/infrared/ir_itt.c +++ b/boop/infrared/ir_itt.c @@ -126,6 +126,7 @@ void __attribute__ ((section(".text.fastcode"))) ITT_Encode (void) } break; } + T1MR0 = cycles * ITT2_Module.lo_border * ITT2_Module.tval; } void ITT_LoadMap(unsigned char map) diff --git a/boop/infrared/ir_lirc.c b/boop/infrared/ir_lirc.c index f4a7e98..2dc4204 100644 --- a/boop/infrared/ir_lirc.c +++ b/boop/infrared/ir_lirc.c @@ -300,7 +300,6 @@ void __attribute__ ((section(".text.fastcode"))) LIRC_Encode (void) { } } - T1MR0 = 15 * cycles; } diff --git a/boop/infrared/ir_nrc17.c b/boop/infrared/ir_nrc17.c index afbe81f..229caf4 100644 --- a/boop/infrared/ir_nrc17.c +++ b/boop/infrared/ir_nrc17.c @@ -115,6 +115,7 @@ void __attribute__ ((section(".text.fastcode"))) NRC17_Encode(void) break; } + T1MR0 = cycles * NRC17_Module.lo_border * NRC17_Module.tval; } /* void NRC17_CopyMap(unsigned char xtra, unsigned short *map) diff --git a/boop/infrared/ir_rc5.c b/boop/infrared/ir_rc5.c index 8c6c6c1..624620f 100644 --- a/boop/infrared/ir_rc5.c +++ b/boop/infrared/ir_rc5.c @@ -98,6 +98,7 @@ void __attribute__ ((section(".text.fastcode"))) RC5_Encode (void) } break; } + T1MR0 = cycles * RC5_Module.lo_border * RC5_Module.tval; } void RC5_Init(unsigned char map) diff --git a/boop/infrared/ir_rc6.c b/boop/infrared/ir_rc6.c index d42b43a..990fa08 100644 --- a/boop/infrared/ir_rc6.c +++ b/boop/infrared/ir_rc6.c @@ -148,6 +148,7 @@ void __attribute__ ((section(".text.fastcode"))) RC6_Encode (void) } break; } + T1MR0 = cycles * RC6_Module.lo_border * RC6_Module.tval; } void RC6_Init(unsigned char map) diff --git a/boop/infrared/ir_rca.c b/boop/infrared/ir_rca.c index 84e95d5..1ba24d7 100644 --- a/boop/infrared/ir_rca.c +++ b/boop/infrared/ir_rca.c @@ -120,6 +120,7 @@ void __attribute__ ((section(".text.fastcode"))) RCA_Encode (void) } break; } + T1MR0 = cycles * RCA_Module.lo_border * RCA_Module.tval; } void RCA_LoadMap(unsigned char map) diff --git a/boop/infrared/ir_rcmm.c b/boop/infrared/ir_rcmm.c index 2424391..e477185 100644 --- a/boop/infrared/ir_rcmm.c +++ b/boop/infrared/ir_rcmm.c @@ -117,6 +117,7 @@ void __attribute__ ((section(".text.fastcode"))) RCMM_Encode (void) } + T1MR0 = cycles * RCMM_Module.lo_border * RCMM_Module.tval; } void RCMM_LoadMap(unsigned char map) diff --git a/boop/infrared/ir_rec80.c b/boop/infrared/ir_rec80.c index 6f4f8b1..02fb5f7 100644 --- a/boop/infrared/ir_rec80.c +++ b/boop/infrared/ir_rec80.c @@ -117,6 +117,7 @@ void __attribute__ ((section(".text.fastcode"))) REC80_Encode (void) } break; } + T1MR0 = cycles * REC80_Module.lo_border * REC80_Module.tval; } void REC80_LoadMap(unsigned char map) diff --git a/boop/infrared/ir_recs80.c b/boop/infrared/ir_recs80.c index d15dbd1..cabd96b 100644 --- a/boop/infrared/ir_recs80.c +++ b/boop/infrared/ir_recs80.c @@ -90,6 +90,7 @@ void __attribute__ ((section(".text.fastcode"))) RECS80_Encode (void) } break; } + T1MR0 = cycles * RECS80_Module.lo_border * RECS80_Module.tval; } void RECS80_Init(unsigned char map) diff --git a/boop/infrared/ir_sirc.c b/boop/infrared/ir_sirc.c index 0bcfa8a..dd9e4b4 100644 --- a/boop/infrared/ir_sirc.c +++ b/boop/infrared/ir_sirc.c @@ -103,6 +103,8 @@ void __attribute__ ((section(".text.fastcode"))) SIRC_Encode (void) break; } + + T1MR0 = cycles * SIRC_Module.lo_border * SIRC_Module.tval; } void SIRC_Init(unsigned char map) diff --git a/boop/infrared/ir_spaceenc.c b/boop/infrared/ir_spaceenc.c index d6c0ccc..73b0228 100644 --- a/boop/infrared/ir_spaceenc.c +++ b/boop/infrared/ir_spaceenc.c @@ -137,6 +137,7 @@ void __attribute__ ((section(".text.fastcode"))) SPACEENC_Encode (void) } break; } + T1MR0 = cycles * SPACEENC_Module.lo_border * SPACEENC_Module.tval; } void SPACEENC_LoadMap(unsigned char map)