Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
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;
}