Example #1
0
static inline void ads8568_read_bus( uint16_t *data)
{
    GPIO_setOutput( ADC_RD, GPIO_LOW );
    adc_delay(1);
    *data =  adc_gpio_bus_data_convert(GPIO_getBank(GPIO_BANK0));
    GPIO_setOutput( ADC_RD, GPIO_HIGH );
}
Example #2
0
static void ads8568_reset( void )
{
    volatile uint32_t delay = 0;

    GPIO_setOutput( ADC_RESET, GPIO_LOW );

    /* 100ns delay */
    for(delay = 0; delay < RESET_DELAY; delay++);

    GPIO_setOutput( ADC_RESET, GPIO_HIGH );

    /* 100ns delay */
    for(delay = 0; delay < RESET_DELAY; delay++);

    GPIO_setOutput( ADC_RESET, GPIO_LOW );
}
Example #3
0
static inline void ads8568_start_conv( void )
{
    volatile uint32_t delay = 0;

    GPIO_setOutput( ADC_CONVST, GPIO_LOW );

    /* 100ns delay */
    for(delay = 0; delay < 5; delay++);

    GPIO_setOutput( ADC_CONVST, GPIO_HIGH );

    /* 100ns delay */
    for(delay = 0; delay < 1; delay++);

    GPIO_setOutput( ADC_CONVST, GPIO_LOW );
    return;
}
Example #4
0
File: cli.c Project: hyrant/fulcrum
bool CLI_process(CLIContext *context)
{
    while (true) {
        char *end = strpbrk(context->buffer, "\r\n");
        if (end == NULL)
            return true;            
        *end = 0;
        
        if (bufferStartsWith(context, "quit")) {
            addToOutput(context, "EXIT");
            return false;
        }
        
        const char *ptr;
        if (bufferStartsWith(context, "set uart mode") ||
                bufferStartsWith(context, "set uart tx") ||
                bufferStartsWith(context, "set sys iofunc")) {
            /* Ignored */
            addToOutput(context, "AOK\r\n");
        } else if ((ptr=bufferStartsWith(context, 
                "set uart instant ")) != NULL) {
            uint32_t baud = parseDecimal(ptr);
            if (baud > 0) {
                Serial_setBaud(baud);
                addToOutput(context, "AOK\r\n");
            } else {
                addToOutput(context, "ERROR\r\n");
            }
        } else if ((ptr=bufferStartsWith(context, "set sys mask ")) != NULL) {
            uint32_t mask = parseHex(ptr, &ptr);
            if (!(*ptr)) {
                addToOutput(context, "ERROR\r\n");
            } else if (*ptr == '0') {
                GPIO_setMode(mask, false);
                addToOutput(context, "AOK\r\n");
            } else {
                GPIO_setMode(mask, true);
                addToOutput(context, "AOK\r\n");
            }
        } else if ((ptr=bufferStartsWith(context, "set sys output ")) != NULL) {
            uint32_t output = parseHex(ptr, &ptr);
            if (!(*ptr)) {
                addToOutput(context, "ERROR\r\n");
            } else {
                uint32_t mask = parseHex(ptr, &ptr);
                GPIO_setOutput(mask, output);
                addToOutput(context, "AOK\r\n");
            }
        } else if (end != &context->buffer[0]) {
            addToOutput(context, "ERROR\r\n");
        }
        
        memmove(context->buffer, end+1, strlen(end+1)+1);
    }
}
Example #5
0
int ads8568_read_ch( uint16_t *data, uint8_t ch, uint8_t range,
        uint8_t mode, uint8_t polarity )
{
    /* TODO: add support for range, mode and polarity */

    uint16_t    tmp; 
    int 		ch_index = 0;
    volatile int delay = 10;

    GPIO_PinNumber_t cs;
    
    if( ch > ADS8568_CH_MAX )
        return -1; 

    /* conversion start */  
    ads8568_start_conv();

    if ( ch > 8 )
    {
        cs = ADC_CS1;
        ch -= 8;
    }
    else
        cs = ADC_CS2;

    while(GPIO_getInput(ADC_BUSY));
    /* conversion end */  

    GPIO_setOutput( cs, GPIO_LOW);
    for(ch_index = 0; ch_index < 8; ch_index++ )
    {
        if ( ch_index == ch ) 
            ads8568_read_bus(data);  
        else 
            /* dummy read */ 
            ads8568_read_bus(&tmp);  
    }
    GPIO_setOutput( cs, GPIO_HIGH);

    return 0; 
}
Example #6
0
static void ads8568_init_gpio( void )
{
    adc_set_gpio_data_bus();

    GPIO_setDir( ADC_CS1,	GPIO_OUTPUT );
    GPIO_setDir( ADC_CS2, 	GPIO_OUTPUT );
    GPIO_setDir( ADC_CONVST,GPIO_OUTPUT );
    GPIO_setDir( ADC_HW_SW, GPIO_OUTPUT );
    GPIO_setDir( ADC_WR,	GPIO_OUTPUT );
    GPIO_setDir( ADC_RESET, GPIO_OUTPUT );

    GPIO_setDir( ADC_BUSY, 	GPIO_INPUT	);

    /* set initial state of gpio */
    GPIO_setOutput( ADC_CS1, 	GPIO_HIGH );
    GPIO_setOutput( ADC_CS2, 	GPIO_HIGH );
    GPIO_setOutput( ADC_CONVST,	GPIO_LOW  );

    /* low - hardware mode selected, high - software */
    GPIO_setOutput( ADC_HW_SW, 	GPIO_LOW );

    /* enable internal reference voltage */
    GPIO_setOutput( ADC_WR, 	GPIO_HIGH );

    /* disable reset signal */
    GPIO_setOutput( ADC_RESET, 	GPIO_LOW );

    return;
}
Example #7
0
/* led: 1/2 (D1/D2); state: 0/1 (off/on) */
void mdaqled_set(unsigned char led, unsigned char state)
{
#ifndef MATLAB_MEX_FILE
    if (led == 1)
        /* D1 */
        if (state == 1)
            /* ON */
            GPIO_setOutput(GP2_7, GPIO_HIGH);
        else
            GPIO_setOutput(GP2_7, GPIO_LOW);
    else if (led == 2)
        /* D2 */
        if (state == 1)
            /* ON */
            GPIO_setOutput(GP2_6, GPIO_HIGH);
        else
            GPIO_setOutput(GP2_6, GPIO_LOW);
    else
    {
        /* Shouldn't get here, but switch off LEDs for good */
        GPIO_setOutput(GP2_7, GPIO_LOW);
        GPIO_setOutput(GP2_6, GPIO_LOW);
    }
#endif
}
Example #8
0
static void gpioCompleted(int fd)
{
    gpioFieldCompleted();
    
    switch (post.gpio.mode) {
    case GPIO_Disable:
        GPIO_setMode(1<<post.gpio.pin, false);
        break;
    case GPIO_On:
        GPIO_setMode(1<<post.gpio.pin, true);
        GPIO_setOutput(1<<post.gpio.pin, 1<<post.gpio.pin);
        break;
    case GPIO_Off:
        GPIO_setMode(1<<post.gpio.pin, true);
        GPIO_setOutput(1<<post.gpio.pin, 0);
        break;
    default:
        break;
    }
    
    serveMainPage(fd);
}
Example #9
0
int ads8568_scan_ch( uint16_t *data, uint8_t *ch, uint8_t ch_count, 
        uint8_t range, uint8_t mode, uint8_t polarity )
{
    uint8_t     ch_max = 0;
    uint8_t     data_index = 0;
    uint8_t     ch_to_read[ADS8568_CH_MAX];
    uint8_t 	ch_index = 0;
    uint16_t    tmp; 
    volatile    GPIO_PinNumber_t cs;
    
    /* check parameters */ 
    if ( !ch_count || 
          ch_count > ADS8568_CH_MAX ||
          data == NULL ||
          ch == NULL )
        return -1;             

    /* start analog-to-digital conversion */
    ads8568_start_conv();

    /* find max channel */ 
    ch_max = max_array(ch, ch_count);
    if ( ch_max > ADS8568_CH_MAX )
        return -1; 

    memset((void *)ch_to_read, 0x0, sizeof(ch_to_read));    
    for ( ch_index = 0; ch_index < ch_count; ch_index++)
    {
    	if (ch[ch_index] <  ADS8568_CH_MAX)
    		ch_to_read[ch[ch_index]] = 1;
    }

    /* Wait for conversion end */
    while(GPIO_getInput(ADC_BUSY));

    /* Set CS to active*/
    GPIO_setOutput(ADC_CS2, GPIO_LOW);
    for(ch_index = 0; ch_index < ch_max; ch_index++)
    {
        if ( ch_index == 8 )
        {
            GPIO_setOutput(ADC_CS2, GPIO_HIGH);
            GPIO_setOutput(ADC_CS1, GPIO_LOW);
        }

        if( ch_to_read[ch_index] )
        {
            ads8568_read_bus(&data[data_index]); 
            data_index++; 
        }
        else 
        {
            /* dummy read */ 
            ads8568_read_bus(&tmp); 
        }
   } 

    GPIO_setOutput(ADC_CS1, GPIO_HIGH);
    GPIO_setOutput(ADC_CS2, GPIO_HIGH);

    return data_index;
}
Void main()
{

	int i = 0;

	// unlock the system config registers.
	SYSCONFIG->KICKR[0] = KICK0R_UNLOCK;
	SYSCONFIG->KICKR[1] = KICK1R_UNLOCK;

	SYSCONFIG1->PUPD_SEL |= 0x10000000;  // change pin group 28 to pullup for GP7[12/13] (LCD switches)

	// Initially set McBSP1 pins as GPIO ins
	CLRBIT(SYSCONFIG->PINMUX[1], 0xFFFFFFFF);
	SETBIT(SYSCONFIG->PINMUX[1], 0x88888880);  // This is enabling the McBSP1 pins

	CLRBIT(SYSCONFIG->PINMUX[16], 0xFFFF0000);
	SETBIT(SYSCONFIG->PINMUX[16], 0x88880000);  // setup GP7.8 through GP7.13 
	CLRBIT(SYSCONFIG->PINMUX[17], 0x000000FF);
	SETBIT(SYSCONFIG->PINMUX[17], 0x00000088);  // setup GP7.8 through GP7.13


	//Rick added for LCD DMA flagging test
	GPIO_setDir(GPIO_BANK0, GPIO_PIN8, GPIO_OUTPUT);
	GPIO_setOutput(GPIO_BANK0, GPIO_PIN8, OUTPUT_HIGH);

	GPIO_setDir(GPIO_BANK0, GPIO_PIN0, GPIO_INPUT);
	GPIO_setDir(GPIO_BANK0, GPIO_PIN1, GPIO_INPUT);
	GPIO_setDir(GPIO_BANK0, GPIO_PIN2, GPIO_INPUT);
	GPIO_setDir(GPIO_BANK0, GPIO_PIN3, GPIO_INPUT);
	GPIO_setDir(GPIO_BANK0, GPIO_PIN4, GPIO_INPUT);
	GPIO_setDir(GPIO_BANK0, GPIO_PIN5, GPIO_INPUT);  
	GPIO_setDir(GPIO_BANK0, GPIO_PIN6, GPIO_INPUT);

	GPIO_setDir(GPIO_BANK7, GPIO_PIN8, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK7, GPIO_PIN9, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK7, GPIO_PIN10, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK7, GPIO_PIN11, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK7, GPIO_PIN12, GPIO_INPUT);
	GPIO_setDir(GPIO_BANK7, GPIO_PIN13, GPIO_INPUT); 

	GPIO_setOutput(GPIO_BANK7, GPIO_PIN8, OUTPUT_HIGH);  
	GPIO_setOutput(GPIO_BANK7, GPIO_PIN9, OUTPUT_HIGH);
	GPIO_setOutput(GPIO_BANK7, GPIO_PIN10, OUTPUT_HIGH);
	GPIO_setOutput(GPIO_BANK7, GPIO_PIN11, OUTPUT_HIGH);  

	CLRBIT(SYSCONFIG->PINMUX[13], 0xFFFFFFFF);
	SETBIT(SYSCONFIG->PINMUX[13], 0x88888811); //Set GPIO 6.8-13 to GPIOs and IMPORTANT Sets GP6[15] to /RESETOUT used by PHY, GP6[14] CLKOUT appears unconnected

	#warn GP6.15 is also connected to CAMERA RESET This is a Bug in my board design Need to change Camera Reset to different IO.

	GPIO_setDir(GPIO_BANK6, GPIO_PIN8, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK6, GPIO_PIN9, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK6, GPIO_PIN10, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK6, GPIO_PIN11, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK6, GPIO_PIN12, GPIO_OUTPUT);
	GPIO_setDir(GPIO_BANK6, GPIO_PIN13, GPIO_INPUT);   


   // on power up wait until Linux has initialized Timer1
	while ((T1_TGCR & 0x7) != 0x7) {
	  for (index=0;index<50000;index++) {}  // small delay before checking again

	}

	USTIMER_init();
	
	// Turn on McBSP1
	EVMOMAPL138_lpscTransition(PSC1, DOMAIN0, LPSC_MCBSP1, PSC_ENABLE);

    // If Linux has already booted It sets a flag so no need to delay
    if ( GET_ISLINUX_BOOTED == 0) {
    	USTIMER_delay(4*DELAY_1_SEC);  // delay allowing Linux to partially boot before continuing with DSP code
    }
	   
	// init the us timer and i2c for all to use.
	I2C_init(I2C0, I2C_CLK_100K);
	init_ColorVision();	
	init_LCD_mem(); // added rick

	EVTCLR0 = 0xFFFFFFFF;
	EVTCLR1 = 0xFFFFFFFF;
	EVTCLR2 = 0xFFFFFFFF;
	EVTCLR3 = 0xFFFFFFFF;	

	init_DMA();
	init_McBSP();

	init_LADAR();

	CLRBIT(SYSCONFIG->PINMUX[1], 0xFFFFFFFF);
	SETBIT(SYSCONFIG->PINMUX[1], 0x22222220);  // This is enabling the McBSP1 pins

	CLRBIT(SYSCONFIG->PINMUX[5], 0x00FF0FFF);
	SETBIT(SYSCONFIG->PINMUX[5], 0x00110111);  // This is enabling SPI pins

	CLRBIT(SYSCONFIG->PINMUX[16], 0xFFFF0000);
	SETBIT(SYSCONFIG->PINMUX[16], 0x88880000);  // setup GP7.8 through GP7.13 
	CLRBIT(SYSCONFIG->PINMUX[17], 0x000000FF);
	SETBIT(SYSCONFIG->PINMUX[17], 0x00000088);  // setup GP7.8 through GP7.13

	init_LCD();
    
	LADARps.x = 3.5/12; // 3.5/12 for front mounting
	LADARps.y = 0;
	LADARps.theta = 1;  // not inverted

	OPTITRACKps.x = 0;
	OPTITRACKps.y = 0;
	OPTITRACKps.theta = 0;

	for(i = 0;i<LADAR_MAX_DATA_SIZE;i++)
	{ LADARdistance[i] = LADAR_MAX_READING; } //initialize all readings to max value.

	// ROBOTps will be updated by Optitrack during gyro calibration
	// TODO: specify the starting position of the robot
	ROBOTps.x = 0;			//the estimate in array form (useful for matrix operations)
	ROBOTps.y = 0;
	ROBOTps.theta = 0;  // was -PI: need to flip OT ground plane to fix this

	// flag pins
	GPIO_setDir(IMAGE_TO_LINUX_BANK, IMAGE_TO_LINUX_FLAG, GPIO_OUTPUT);
	GPIO_setDir(OPTITRACKDATA_FROM_LINUX_BANK, OPTITRACKDATA_FROM_LINUX_FLAG, GPIO_OUTPUT);
	GPIO_setDir(DATA_TO_LINUX_BANK, DATA_TO_LINUX_FLAG, GPIO_OUTPUT);
	GPIO_setDir(DATA_FROM_LINUX_BANK, DATA_FROM_LINUX_FLAG, GPIO_OUTPUT);
	GPIO_setDir(DATAFORFILE_TO_LINUX_BANK, DATAFORFILE_TO_LINUX_FLAG, GPIO_OUTPUT);
	GPIO_setDir(LVDATA_FROM_LINUX_BANK, LVDATA_FROM_LINUX_FLAG, GPIO_OUTPUT);
	GPIO_setDir(LVDATA_TO_LINUX_BANK, LVDATA_TO_LINUX_FLAG, GPIO_OUTPUT);


	CLR_OPTITRACKDATA_FROM_LINUX;  // Clear = tell linux DSP is ready for new Opitrack data
	CLR_DATA_FROM_LINUX;  // Clear = tell linux that DSP is ready for new data
	CLR_DATAFORFILE_TO_LINUX;  // Clear = linux not requesting data
	SET_DATA_TO_LINUX;  // Set = put float array data into shared memory for linux
	SET_IMAGE_TO_LINUX;  // Set = put image into shared memory for linux
	CLR_LVDATA_FROM_LINUX;  // Clear = tell linux that DSP is ready for new LV data
	SET_LVDATA_TO_LINUX;  // Set = put LV char data into shared memory for linux

    // clear all possible EDMA 
	EDMA3_0_Regs->SHADOW[1].ICR = 0xFFFFFFFF;
	
    // Add your init code here
}
Example #11
0
/*GPIO Init Function*/
void GPIO_Init()
{
	GPIO_setOutput(FK_GPIOA,5);
	GPIO_setInput(FK_GPIOC,13,PuPd_NO);
	
}