From b508d138a8f54b8902982fb77b05f3b86bb35c0d Mon Sep 17 00:00:00 2001 From: Mariano Alvira Date: Thu, 16 Apr 2009 17:59:00 -0400 Subject: [PATCH] flash init --- makes them work much better. resumeMACAsync on each received packet --- no more lockups. --- include/maca.h | 2 ++ src/maca.c | 75 ++++++++++++++++++++++++++++++++++++----- tests/rftest-rx.c | 86 ++++------------------------------------------- tests/rftest-tx.c | 7 ++-- 4 files changed, 78 insertions(+), 92 deletions(-) diff --git a/include/maca.h b/include/maca.h index e374494c6..e9079ea9d 100644 --- a/include/maca.h +++ b/include/maca.h @@ -400,6 +400,7 @@ typedef union maca_maskirq_reg_tag #define _is_action_complete_interrupt(x) (0 != (maca_irq_acpl & x)) #define _is_filter_failed_interrupt(x) (0 != (maca_irq_flt & x)) +#define _is_checksum_failed_interrupt(x) (0 != (maca_irq_crc & x)) #define SMAC_MACA_CNTL_INIT_STATE ( control_prm | control_nofc | control_mode_non_slotted ) @@ -411,6 +412,7 @@ void init_phy(void); void vreg_init(void); void ResumeMACASync(void); void radio_init(void); +uint32_t init_from_flash(uint32_t addr); void set_power(uint8_t power); void set_channel(uint8_t chan); diff --git a/src/maca.c b/src/maca.c index 0d624fd12..2aa852f17 100644 --- a/src/maca.c +++ b/src/maca.c @@ -28,7 +28,7 @@ void init_phy(void) maca_framesync = 0x000000A7; maca_clk = 0x00000008; // maca_maskirq = 0; //(maca_irq_cm | maca_irq_acpl | maca_irq_rst | maca_irq_di | maca_irq_crc | maca_irq_flt ); - maca_maskirq = (maca_irq_rst | maca_irq_acpl | maca_irq_cm | maca_irq_flt); + maca_maskirq = (maca_irq_rst | maca_irq_acpl | maca_irq_cm | maca_irq_flt | maca_irq_crc); maca_slotoffset = 0x00350000; } @@ -149,7 +149,7 @@ void vreg_init(void) { /* radio_init has been tested to be good */ void radio_init(void) { - uint32_t i; + volatile uint32_t i; /* sequence 1 */ for(i=0; i>17) & 1) !=1) { continue; } /* wait for the bypass to take */ + *(volatile uint32_t *)(0x80003048) = 0x00000fa4; /* start the regulators */ + for(i=0; i<0x161a8; i++) { continue; } /* wait for the bypass to take */ + + init_from_flash(0x1F000); + + puts("ram_values:\n\r"); + for(i=0; i<4; i++) { + puts(" 0x"); + put_hex(ram_values[i]); + puts("\n\r"); + } + } const uint32_t PSMVAL[19] = { @@ -354,32 +372,55 @@ void set_channel(uint8_t chan) { #define ENTRY_EOF 0x00000e0f /* processes up to 4 words of initialization entries */ /* returns the number of words processed */ -uint8_t exec_init_entry(uint32_t *entries, uint8_t *valbuf) +uint32_t exec_init_entry(uint32_t *entries, uint8_t *valbuf) { volatile uint32_t i; if(entries[0] <= ROM_END) { if (entries[0] == 0) { /* do delay command*/ + puts("init_entry: delay "); + put_hex32(entries[1]); + puts("\n\r"); for(i=0; i= 16) && (entries[0] < 0xfff1)) { /* store bytes in valbuf */ + puts("init_entry: store in valbuf "); + put_hex(entries[1]); + puts(" position "); + put_hex((entries[0]>>4)-1); + puts("\n\r"); valbuf[(entries[0]>>4)-1] = entries[1]; return 2; } else if (entries[0] == ENTRY_EOF) { + puts("init_entry: eof "); return 0; } else { /* invalid command code */ + puts("init_entry: invaild code "); + put_hex32(entries[0]); + puts("\n\r"); return 0; } - } else { /* address isn't in ROM space */ /* do store value in address command */ + puts("init_entry: address value pair - *0x"); + put_hex32(entries[0]); + puts(" = "); + put_hex32(entries[1]); + puts("\n\r"); reg(entries[0]) = entries[1]; return 2; } @@ -390,18 +431,34 @@ uint8_t exec_init_entry(uint32_t *entries, uint8_t *valbuf) uint32_t init_from_flash(uint32_t addr) { nvmType_t type=0; nvmErr_t err; - uint32_t buf[4]; - uint16_t len; - uint32_t i=0; + volatile uint32_t buf[8]; + volatile uint16_t len; + volatile uint32_t i=0,j; err = nvm_detect(gNvmInternalInterface_c, &type); + puts("nvm_detect returned type "); + put_hex32(type); + puts(" err "); + put_hex(err); + puts("\n\r"); + nvm_setsvar(0); err = nvm_read(gNvmInternalInterface_c, type, (uint8_t *)buf, addr, 8); i+=8; + puts("nvm_read returned: 0x"); + put_hex(err); + puts("\n\r"); + + for(j=0; j<4; j++) { + put_hex32(buf[j]); + puts("\n\r"); + } + if(buf[0] == FLASH_INIT_MAGIC) { len = buf[1] & 0x0000ffff; - while(i> 8) << 2; */ -/* /\* write "last warmdown data" to current TSM step to shutdown rx *\/ */ -/* LastWarmdownData = (*((volatile uint32_t *)(0x80009300 + LastWarmdownStep))); */ - -/* puts("LastWarmdownData: "); */ -/* put_hex32(LastWarmdownData); */ -/* puts(NL); */ - -/* reg(MACA_CONTROL) = 0x00031a04; /\* receive *\/ */ -/* while (((tmp = reg(MACA_STATUS)) & 15) == 14) */ -/* puts("."); */ -/* puts("complete status is "); put_hex32(tmp); puts(NL); */ -/* puts("1 status is "); put_hex32(reg(MACA_STATUS)); puts(NL); */ -/* puts("2 status is "); put_hex32(reg(MACA_STATUS)); puts(NL); */ -/* puts("3 status is "); put_hex32(reg(MACA_STATUS)); puts(NL); */ - -/* puts(NL); */ -/* for(i=0; i