From 6a1c483e9c2da2e1affde2a7f3b40ff1c3b09a5f Mon Sep 17 00:00:00 2001 From: hackbard Date: Fri, 12 Oct 2007 14:52:32 +0200 Subject: [PATCH] bullshit commit, sync for travel (to zn00H!) :) --- betty/betty.c | 31 ++++++++++++++++++++++++++----- betty/interrupts.c | 17 ++++++++++++----- betty/interrupts.h | 9 +++++++++ betty/pffs.c | 11 ++--------- betty/pffs.h | 12 ++++-------- betty/pwm.h | 4 +++- betty/system.c | 7 +++++++ 7 files changed, 63 insertions(+), 28 deletions(-) diff --git a/betty/betty.c b/betty/betty.c index 24ea2eb..3a3e7a5 100644 --- a/betty/betty.c +++ b/betty/betty.c @@ -38,14 +38,31 @@ void display_string_page(u8 x,u8 p,u8 *s,u8 f,u8 o,u8 sp) { } } +void audio_mute_toggle(void) { + + if(IOPIN0&(1<<11)) + IOCLR0=(1<<11); + else + IOSET0=(1<<11); +} + +#define AUDIO_TONE_C (7500000/(262*256)) +#define AUDIO_TONE_D (7500000/(294*256)) +#define AUDIO_TONE_E (7500000/(330*256)) +#define AUDIO_TONE_F (7500000/(349*256)) +#define AUDIO_TONE_G (7500000/(392*256)) +//#define AUDIO_TONE_A (7500000/(440*256)) +#define AUDIO_TONE_A 120 +#define AUDIO_TONE_H (7500000/(494*256)) + void __attribute__ ((interrupt("IRQ"))) set_sample(void) { - uart0_send_byte('S'); + //uart0_send_byte('S'); pwm_update_match(PWM_CHAN2,PWM_SINGLE_EDGE,sinus[sample_count++],0); if(sample_count==0xff) sample_count=0; interrupt_ack(); - interrupt_tc_ir_set(INTERRUPT_TC0,INTERRUPT_M0); + interrupt_tc_ir_set(INTERRUPT_TC0,INTERRUPT_MATCH0); } void __attribute__ ((interrupt("IRQ"))) input_event(void) { @@ -117,6 +134,9 @@ void __attribute__ ((interrupt("IRQ"))) input_event(void) { display_string_page(10,8,(u8 *)d2_txt, DISPLAY_FILL_B,0,8); break; + case BUTTON_MUTE: + audio_mute_toggle(); + break; default: display_clear_screen(); break; @@ -191,18 +211,19 @@ int main() { // timer interrupt interrupt_tc_config(INTERRUPT_TC0,INTERRUPT_TC_MODE_T,0,0); - interrupt_tc_match_config(INTERRUPT_TC0,INTERRUPT_M0,120, + interrupt_tc_match_config(INTERRUPT_TC0,INTERRUPT_M0,AUDIO_TONE_A, INTERRUPT_TC_MATCH_IR| INTERRUPT_TC_MATCH_RESET); interrupt_tc_ir_set(INTERRUPT_TC0,INTERRUPT_MATCH0); interrupt_enable(INTERRUPT_TIMER0,INTERRUPT_MODE_VIRQ, 1,(u32)&set_sample); + interrupt_tc_enable(INTERRUPT_TC0); /* pwm init */ + pwm_reset; pwm_set_rate_and_prescaler(0xff,0); pwm_config(PWM_CHAN2,PWM_SINGLE_EDGE,0,0); - pwm_match_ctrl_config(PWM_CHAN2,0); - interrupt_pwm_ir_set(PWM_CHAN2); + pwm_match_ctrl_config(PWM_CHAN2,PWM_MATCH_RESET); pwm_enable; diff --git a/betty/interrupts.c b/betty/interrupts.c index 24159c0..7d319db 100644 --- a/betty/interrupts.c +++ b/betty/interrupts.c @@ -211,14 +211,21 @@ void interrupt_tc_ir_set(u8 tcnum,u8 tcmc) { if(tcnum>1) return; - if(tcnum==0) { + if(tcnum==0) T0IR=tcmc; - T0TCR=0x01; - } - else { + else T1IR=tcmc; +} + +void interrupt_tc_enable(u8 tcnum) { + + if(tcnum>1) + return; + + if(tcnum==0) + T0TCR=0x01; + else T1TCR=0x01; - } } // pwm interrupts diff --git a/betty/interrupts.h b/betty/interrupts.h index 0ce073b..9da41e0 100644 --- a/betty/interrupts.h +++ b/betty/interrupts.h @@ -85,6 +85,14 @@ #define INTERRUPT_CAP2 0x40 #define INTERRUPT_CAP3 0x80 +#define INTERRUPT_PWM0 0x01 +#define INTERRUPT_PWM1 0x02 +#define INTERRUPT_PWM2 0x04 +#define INTERRUPT_PWM3 0x08 +#define INTERRUPT_PWM4 0x10 +#define INTERRUPT_PWM5 0x20 +#define INTERRUPT_PWM6 0x40 + #define INTERRUPT_SET 0x00 #define INTERRUPT_USED 0x01 #define INTERRUPT_PRIORITY_USED 0x02 @@ -118,6 +126,7 @@ void interrupt_tc_config(u8 tcnum,u8 mode,u8 cap,u32 psc); void interrupt_tc_match_config(u8 tcnum,u8 mnum,u32 val,u8 mode); void interrupt_tc_capt_config(u8 tcnum,u8 cnum,u8 mode); void interrupt_tc_ir_set(u8 tcnum,u8 tcmc); +void interrupt_tc_enable(u8 tcnum); void interrupt_pwm_ir_set(u8 pwm_channel); diff --git a/betty/pffs.c b/betty/pffs.c index 7ba2232..93351bd 100644 --- a/betty/pffs.c +++ b/betty/pffs.c @@ -148,9 +148,7 @@ int pffs_rearrange(t_pffs *pffs) { return 0; } -int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr, - u8 sec_num_data_min,u8 sec_num_data_max, - u8 sec_num_index0,u8 sec_num_index1, +int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr,u8 sec_num, int (*fw)(u32 addr,u16 *buf,int len), int (*fr)(u32 addr,u16 *buf,int len), int (*fe)(u32 addr)) { @@ -158,12 +156,7 @@ int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr, /* assign physical flash specs */ pffs->base_addr=base_addr; pffs->sec_addr=sec_addr; - - /* specified index and data sectors */ - pffs->sec_num_data[0]=sec_num_data_min; - pffs->sec_num_data[1]=sec_num_data_max; - pffs->sec_num_index[0]=sec_num_index0; - pffs->sec_num_index[1]=sec_num_index1; + pffs->sec_num=sec_num; /* flash acccess function pointers */ pffs->fw=fw; diff --git a/betty/pffs.h b/betty/pffs.h index 98ddd50..5849fa7 100644 --- a/betty/pffs.h +++ b/betty/pffs.h @@ -66,10 +66,9 @@ typedef struct s_pffs { /* flash specs */ - u32 base_addr; - u32 *sec_addr; - u8 sec_num_data[2]; // first/last sector used for data - u8 sec_num_index[2]; // 2 sectors used as an index + u32 base_addr; // base flash access address + u32 *sec_addr; // pointer to sector addresses + u8 sec_num; // number of sectors /* flash write, read and sector erase function pointers */ int (*fw)(u32 addr,u16 *buf,int len); @@ -78,7 +77,6 @@ typedef struct s_pffs { /* pffs internal variables */ u8 state; - u8 index_sec; // current index sector u8 data_tmp_sec; // current temp data sector } t_pffs; @@ -105,9 +103,7 @@ typedef struct s_pffs_file_header { } /* function prototypes (only the ones applications should use!) */ -int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr, - u8 sec_num_data_min,u8 sec_num_data_max, - u8 sec_num_index0,u8 sec_num_index1, +int pffs_flash_register(t_pffs *pffs,u32 base_addr,u32 *sec_addr,u8 sec_num, int (*fw)(u32 addr,u16 *buf,int len), int (*fr)(u32 addr,u16 *buf,int len), int (*fe)(u32 addr)); diff --git a/betty/pwm.h b/betty/pwm.h index 9d1903f..0d70f2d 100644 --- a/betty/pwm.h +++ b/betty/pwm.h @@ -12,7 +12,9 @@ #include "types.h" /* macros */ -#define pwm_enable PWMTCR=0x0b +#define pwm_enable PWMTCR=0x09 +#define pwm_reset PWMTCR=0x03 +#define pwm_disable PWMTCR=0x00 /* defines */ #define PWM_SINGLE_EDGE 0x00 diff --git a/betty/system.c b/betty/system.c index 7554373..b181733 100644 --- a/betty/system.c +++ b/betty/system.c @@ -65,6 +65,7 @@ void pin_init(void) { * * uart0: tx, rx * p0.7: pwm2 + * p0.11: gpio -> audio (leave as is) * */ @@ -108,8 +109,14 @@ void pin_init(void) { * out: p2.18 - p2.24 (+ pull high) * in: p0.30, p0.{27,28}, p3.{20,21}, p0.22, p0.13 * + * audio: + * + * p0.11: out + * */ + //IODIR0=(1<<11); + // nothing to do for inputs (default: 0x00000000) IODIR2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); IOSET2=((1<<18)|(1<<19)|(1<<20)|(1<<21)|(1<<22)|(1<<23)|(1<<24)); -- 2.39.2