#define GPIO_FUNC_SEL0 0x80000018 /* GPIO 15 - 0; 2 bit blocks */ #define GPIO_FUNC_SEL2 0x80000020 /* GPIO 47 - 32; 2 bit blocks */ #define BASE_UART1 0x80005000 #define UART1_CON 0x80005000 #define UART1_STAT 0x80005004 #define UART1_DATA 0x80005008 #define UR1CON 0x8000500c #define UT1CON 0x80005010 #define UART1_CTS 0x80005014 #define UART1_BR 0x80005018 #define GPIO_PAD_DIR0 0x80000000 #define GPIO_DATA0 0x80000008 #include "maca.h" #include "embedded_types.h" #include "isr.h" #define reg(x) (*(volatile uint32_t *)(x)) #define DELAY 100000 #define DATA 0x00401000; #define NL "\033[K\r\n" void putc(uint8_t c); void puts(uint8_t *s); void put_hex(uint8_t x); void put_hex16(uint16_t x); void put_hex32(uint32_t x); const uint8_t hex[16]={'0','1','2','3','4','5','6','7', '8','9','a','b','c','d','e','f'}; void magic(void) { #define X 0x80009a000 #define Y 0x80009a008 #define VAL 0x0000f7df volatile uint32_t x,y; x = reg(X); /* get X */ x &= 0xfffeffff; /* clear bit 16 */ reg(X) = x; /* put it back */ y = reg(Y); /* get Y */ y |= VAL; /* or with the VAL */ x = reg(X); /* get X again */ x |= 16; /* or with 16 */ reg(X) = x; /* put X back */ reg(Y) = y; /* put Y back */ } uint32_t ackBox[10]; #define command_xcvr_rx() \ do { \ maca_txlen = (uint32_t)1<<16; \ maca_dmatx = (uint32_t)&ackBox; \ maca_dmarx = DATA; \ maca_tmren = (maca_cpl_clk | maca_soft_clk); \ maca_control = (control_prm | control_asap | control_seq_rx); \ }while(FALSE) #define PAYLOAD_LEN 16 /* not including the extra 4 bytes for len+fcs+somethingelse */ /* maca dmatx needs extra 4 bytes for checksum */ /* needs + 4 bytes for len(1 byte) + fcs(2 bytes) + somethingelse */ #define command_xcvr_tx() \ do { \ maca_txlen = (uint32_t)(PAYLOAD_LEN+4); \ maca_dmatx = (uint32_t)DATA; \ maca_dmarx = (uint32_t)&ackBox; \ maca_control = (control_prm | control_mode_no_cca | \ control_asap | control_seq_tx); \ }while(FALSE) void dump_regs(uint32_t base, uint32_t len) { volatile uint32_t i; puts("base +0 +4 +8 +c +10 +14 +18 +1c \n\r"); for (i = 0; i < len; i ++) { if ((i & 7) == 0) { put_hex16(4 * i); } puts(" "); put_hex32(reg(base+(4*i))); if ((i & 7) == 7) puts(NL); } puts(NL); } volatile uint8_t led; #include "led.h" #define LED LED_RED #define led_on() do { led = 1; reg(GPIO_DATA0) = LED; } while(0); #define led_off() do { led = 0; reg(GPIO_DATA0) = 0x00000000; } while(0); void toggle_led(void) { if(0 == led) { led_on(); led = 1; } else { led_off(); } } volatile uint8_t *data; uint8_t count=0; void fill_data(void) { uint8_t i; for(i=0; i> 4]); putc(hex[x & 15]); } void put_hex16(uint16_t x) { put_hex((x >> 8) & 0xFF); put_hex((x) & 0xFF); } void put_hex32(uint32_t x) { put_hex((x >> 24) & 0xFF); put_hex((x >> 16) & 0xFF); put_hex((x >> 8) & 0xFF); put_hex((x) & 0xFF); }