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 ); }
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 ); }
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; }
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); } }
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; }
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; }
/* 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 }
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); }
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 }
/*GPIO Init Function*/ void GPIO_Init() { GPIO_setOutput(FK_GPIOA,5); GPIO_setInput(FK_GPIOC,13,PuPd_NO); }