int main(void) { uint32_t i = 0; config_clocks(); /* Write your code here */ /* Enable Port B */ SIM->SCGC5 |= SIM_SCGC5_PORTB_MASK; SIM->SCGC5 |= SIM_SCGC5_PORTA_MASK; SIM->SCGC4 |= 1 << 22; config_spi(); PORTA_PCR8 |= PORT_PCR_MUX(3); PORTA_PCR9 |= PORT_PCR_MUX(3); GPIOA_PDDR |= (1 << SWD_CLK_PIN);// /*(1 << SWD_IO_PIN) |*/ (1 << 12); GPIOA_PCOR = 1 << SWD_CLK_PIN; // Make sure the clock is low when shifting to GPIO #ifdef _DEBUG config_uart(); #endif /* Enable RED LED as GPIO */ PORTB_PCR10 |= PORT_PCR_MUX(1); /* Set PTB10, PTB11 and PTB13 as outputs */ GPIOB_PDDR |= 1 << 10; /* Turn off LEDs */ GPIOB_PSOR = 1 << 10; uint32_t data = 0x12345678; uint8_t ret = 0; // Reset the bus and confirm the target is configured reset_and_power_debug(); swd_write(false, DB_REG_SELECT, 0x01000000); swd_write(true, MDM_REG_CTL, 0x4); swd_read(true, MDM_REG_STAT, &data); swd_read(false, DB_REG_RD_BUFF, &data); swd_write(false, DB_REG_SELECT, 0x00); swd_write(true, AP_REG_CSW, 0x03000042); swd_read(true, AP_REG_CSW, &data); swd_read(false, DB_REG_RD_BUFF, &data); swd_write_mem((uint32_t)&(CoreDebug->DHCSR), 0xA05F0003); swd_write_array(SRAM_START,blink_code,blink_code_len); swd_write_reg(0xF,SRAM_START); swd_write_reg(0xE,SRAM_START+1); swd_write_mem((uint32_t)&(CoreDebug->DHCSR), 0xA05F0000); // takeover_and_inject(); while(1){ /* Turn on RED LED */ GPIOB_PCOR = 1 << 10; for(i = 0; i < delay; i++); /* delay */ /* Turn off RED LED */ GPIOB_PSOR = 1 << 10; for(i = 0; i < delay; i++); /* delay */ // /* Turn on GREEN LED */ // GPIOB_PCOR = 1 << 11; // for(i = 0; i < delay; i++); /* delay */ // /* Turn off GREEN LED */ // GPIOB_PSOR = 1 << 11; // for(i = 0; i < delay; i++); /* delay */ // // /* Turn on BLUE LED */ // GPIOB_PCOR = 1 << 13; // for(i = 0; i < delay; i++); /* delay */ // /* Turn off BLUE LED */ // GPIOB_PSOR = 1 << 13; // for(i = 0; i < delay; i++); /* delay */ //// ret = swd_write(true,AP_REG_DRW,0xFFFF); //// ret = swd_read(false,DB_REG_CTRL_STAT,&data); // swd_read(false,0x00,&data); // data++; if (!(GPIOB_PDIR & (1 << 5))) { GPIOB_PCOR = 1 << 10 | 1 << 11 | 1 << 12; for(i = 0; i < delay; i++); /* delay */ GPIOB_PSOR = 1 << 10 | 1 << 11 | 1 << 12; for(i = 0; i < delay; i++); /* delay */ } } /* Never leave main */ return 0; }
int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop watchdog ti config_clock(); config_spi(); config_i2c(); config_gpio(); // LED Table uint8_t led_table[TABLE_SIZE]; // [ 0x0E + Brightness | B | G | R ] off(led_table, NUM_LED); uint32_t i, reset_count=0; srand(32); /* // TESTING uint8_t IO_A, IO_B, IO_C, IO_D; IO_A = IO_B = IO_C = IO_D = 0; */ // SENSE Table uint16_t sense_table[NUM_SENSE]; /* UCB1I2CSA = SLAVE_ADDR_MASK; // Slave's address while(UCB1CTL1 & UCTXSTP); UCB1CTL1 |= UCTR | UCTXSTT; // Transmit and Start while(!(UCB1IFG & UCTXIFG)); UCB1TXBUF = 0x00; // Inputs while(!(UCB1IFG & UCTXIFG)); UCB1CTL1 |= UCTXSTP; // Stop */ //P6OUT |= BIT5; // get ready to turn off //IR_INPUT; // high impedance for(;;) { P1OUT ^= 0x01; // blinky /* gather(sense_table); random_shift(led_table, 48*5); //flip(led_table); put_data_24(led_table, 48*5); for(i=0;i<0xFFFF;i++) // shitty delay __asm__("nop\nnop\nnop\nnop\nnop\nnop\nnop"); // inject(sense_table); */ gather(sense_table); off(led_table, NUM_LED); process(led_table, sense_table); //random_shift(led_table, NUM_LED); put_data(led_table, NUM_LED); // Read Inputs /* //while(UCB1CTL1 & UCTXSTP); UCB1CTL1 &= ~UCTR; UCB1CTL1 |= UCTXSTT; // Transmit and Start while(UCB1CTL1 & UCTXSTT); while(!(UCB1IFG & UCRXIFG)); IO_A = UCB1RXBUF; // PORT 0 INPUT while(!(UCB1IFG & UCRXIFG)); IO_B = UCB1RXBUF; // PORT 1 INPUT while(!(UCB1IFG & UCRXIFG)); IO_C = UCB1RXBUF; // PORT 0 INPUT UCB1CTL1 |= UCTXSTP; // Stop while(UCB1CTL1 & UCTXSTP); while(!(UCB1IFG & UCRXIFG)); IO_D = UCB1RXBUF; // PORT 1 INPUT if(IO_B&0x01) P1OUT |= 0x01; else P1OUT ^= 0x01; */ /* for(i=0;i<0xFFFF;i++) // shitty delay __asm__("nop\nnop\nnop\nnop\nnop\nnop\nnop"); */ } // main loop return 0; }
int main() { int fd, ret; fd = config_spi(); if (fd < 1) { printf("Failed to configure spi\n"); return fd; } //write_word(fd, 0x00010014, 0xffffffff); int i=0, err_cnt=0; unsigned int *val, *wr_buf, *rd_buf; unsigned int readval; ret = write_word(fd, 0x00017108, 16); printf("write response was %u\n", ret); ret = read_word(fd, 0x00017108, &readval); printf("read response was %u\n", ret); printf("read val was %u\n", readval); int ntrials=1024; val = malloc(sizeof(unsigned int)); for (i=0; i<ntrials; i++) { ret = write_word(fd, 0x00010004+4*i, i); if (ret != 143) { printf("write response was %u\n", ret); } ret = read_word(fd, 0x00010004+4*i, val); if (ret != 143) { printf("read response was %u\n", ret); } if (*val != i) { printf("Read does not match write! (r:%u vs w:%u)\n", *val, i); err_cnt++; } } printf("Errors after %d single writes: %d\n", i, err_cnt); free(val); printf("Trying bulk read of %d words\n", ntrials); wr_buf = calloc(ntrials, sizeof(unsigned int)); rd_buf = calloc(ntrials, sizeof(unsigned int)); for(i=0; i<ntrials; i++) { *(wr_buf+i) = i; } ret = bulk_write(fd, 0x00010004, 4*ntrials, wr_buf); printf("bulk write response was %u\n", ret); ret = bulk_read(fd, 0x00010004, 4*ntrials, rd_buf); for(i=0; i<ntrials; i++) { printf("Wrote %u, got back %u\n", *(wr_buf+i), *(rd_buf+i)); } printf("bulk read response was %u\n", ret); free(wr_buf); free(rd_buf); close(fd); return 0; }