X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Finterrupts.c;h=7d319dbaadb7bf665e3ce3db91c8a5ef78107cff;hp=0e0baa32bbbb04866fc9985b3f00095a98402b5e;hb=6a1c483e9c2da2e1affde2a7f3b40ff1c3b09a5f;hpb=1473a4be06e0cc16875bf6c49719a2c92826f908 diff --git a/betty/interrupts.c b/betty/interrupts.c index 0e0baa3..7d319db 100644 --- a/betty/interrupts.c +++ b/betty/interrupts.c @@ -151,20 +151,22 @@ void interrupt_ext_ir_set(u8 eint) { } // timer counter interrupts -void interrupt_tc_config(u8 tcnum,u8 mode,u8 cap,u32 psc) { +void interrupt_tc_config(u8 tcnum,u8 mode,u8 cap,u32 psv) { if(tcnum>1) return; if(tcnum==0) { T0TCR=0x03; + T0TC=0; T0CTCR=mode|(cap<<2); - T0PR=psc; + T0PR=psv; } else { T1TCR=0x03; + T1TC=0; T1CTCR=mode|(cap<<2); - T1PR=psc; + T1PR=psv; } } @@ -179,15 +181,15 @@ void interrupt_tc_match_config(u8 tcnum,u8 mnum,u32 val,u8 mode) { return; if(tcnum==0) { - T0MCR=mode<<(3*mnum); - mrddr=&T0MR0 + T0MCR=(T0MCR&0x0fff)|(mode<<(3*mnum)); + mraddr=(u32 *)&T0MR0; } else { - T1MCR=mode<<(3*mnum); - mrddr=&T1MR0 + T1MCR=(T1MCR&0x0fff)|(mode<<(3*mnum)); + mraddr=(u32 *)&T1MR0; } - mraddr[mnum]=val; + *((volatile u32 *)(mraddr+mnum))=val; } void interrupt_tc_capt_config(u8 tcnum,u8 cnum,u8 mode) { @@ -199,9 +201,9 @@ void interrupt_tc_capt_config(u8 tcnum,u8 cnum,u8 mode) { return; if(tcnum==0) - T0CCR=mode<<(3*cnum); + T0CCR=(T0CCR&0x0fff)|(mode<<(3*cnum)); else - T1CCR=mode<<(3*cnum); + T1CCR=(T1CCR&0x0fff)|(mode<<(3*cnum)); } void interrupt_tc_ir_set(u8 tcnum,u8 tcmc) { @@ -215,6 +217,23 @@ void interrupt_tc_ir_set(u8 tcnum,u8 tcmc) { T1IR=tcmc; } +void interrupt_tc_enable(u8 tcnum) { + + if(tcnum>1) + return; + + if(tcnum==0) + T0TCR=0x01; + else + T1TCR=0x01; +} + +// pwm interrupts +void interrupt_pwm_ir_set(u8 pwm_channel) { + + PWMIR=(pwm_channel&0x0f)|((pwm_channel&0x70)<<4); +} + /* * the actual exception handlers (as defined in startup.s) */