// gives a response of the form CK_UP 5:OK/18 static inline void respond( char* p_command, u16 p_page, char* p_response ) { uartPutString( p_command ); uartPutChar( ' ' ); itoa( p_page, s_tmpBuffer, 10 ); uartPutString( s_tmpBuffer ); uartPutChar( ':' ); uartPutString( p_response ); uartPutChar( '/' ); u16 bufferRemaining = uartReceiveBufferRemaining(); itoa( bufferRemaining, s_tmpBuffer, 10 ); uartPutStringCRLF( s_tmpBuffer ); }
int main(void) { struct ds1307_t rtc_tm; static const char infostring[] PROGMEM = "Demo - DS1307 RTC\r\n"; char buffer[BUFFER_SIZE]; uartInit(BAUDRATE); i2cInit(I2C_STD_MODE); sei(); ds1307Init(); ds1307SetTime(SYS_HOUR, SYS_MINS, SYS_SECS); ds1307SetDate(SYS_DAY, SYS_MONTH, SYS_YEAR); uartPutString_P(infostring); while (1) { /* Read Current Time from DS1307 and output to UART */ ds1307GetTime(&rtc_tm); sprintf(buffer, "RTC: [%02d:%02d:%02d] - [%02d.%02d.%02d]\r\n", rtc_tm.hours, rtc_tm.minutes, rtc_tm.seconds, rtc_tm.day, rtc_tm.month, rtc_tm.year); uartPutString(buffer); _delay_ms(1000); } /* never reached */ return (0); }
/*------------------------------------------------------------------------------ * Main Program *----------------------------------------------------------------------------*/ int main(void) { uartInit(12); /* baudrate 38400 */ sei(); MCP_init(); uartPutString("MCP2515 CAN Test\n"); /* request configuration mode */ MCP_WRITE_B(CANCTRL, CANCTRL_REQOP, REQOP_CONFIG); /* configure SJW and Tq duration */ MCP_WRITE_B(CNF1, CNF1_SJW, 4-1); /* SJW = X-1 [Tq] */ MCP_WRITE_B(CNF1, CNF1_BRP, 0); /* Tq = 2*(X+1)/FOSC [s] */ /* configure phase seg1 and propseg */ MCP_WRITE_B(CNF2, CNF2_BTLMODE, 1); MCP_WRITE_B(CNF2, CNF2_SAM, 1); MCP_WRITE_B(CNF2, CNF2_PHSEG1, 4-1); /* PHSEG1 = X-1 [Tq] */ MCP_WRITE_B(CNF2, CNF2_PRSEG, 4-1); /* PRSEG = X-1 [Tq] */ /* configure phase seg2 and wakeup filter */ MCP_WRITE_B(CNF3, CNF3_WAKFIL, 1); MCP_WRITE_B(CNF3, CNF3_PHSEG2, 4-1); /* PHSEG2 = X-1 [Tq] */ /* configure interrupts */ MCP_WRITE_R(CANINTE, 0); // Mark all filter bits as don't care: mcp_write_can_id(RXMnSIDH(0), 1, 0); mcp_write_can_id(RXMnSIDH(1), 1, 0); // Anyway, set all filters to 0: mcp_write_can_id(RXF0SIDH, 0, 0); mcp_write_can_id(RXF1SIDH, 0, 0); mcp_write_can_id(RXF2SIDH, 0, 0); mcp_write_can_id(RXF3SIDH, 0, 0); mcp_write_can_id(RXF4SIDH, 0, 0); mcp_write_can_id(RXF5SIDH, 0, 0); /* request loopback mode */ MCP_WRITE_B(CANCTRL, CANCTRL_REQOP, REQOP_LOOPBACK); uint8_t tmp = MCP_read(CANCTRL); uartPutString("CANCTRL = "); uartPutUInt8(tmp, 2); uartPutString("\n"); tmp = MCP_read(CANSTAT); uartPutString("CANSTAT = "); uartPutUInt8(tmp, 2); uartPutString("\n"); tmp = MCP_read(CNF1); uartPutString("CNF1 = "); uartPutUInt8(tmp, 2); uartPutString("\n"); tmp = MCP_read(CNF2); uartPutString("CNF2 = "); uartPutUInt8(tmp, 2); uartPutString("\n"); tmp = MCP_read(CNF3); uartPutString("CNF3 = "); uartPutUInt8(tmp, 2); uartPutString("\n"); tmp = MCP_read(CANINTE); uartPutString("CANINTE = "); uartPutUInt8(tmp, 2); uartPutString("\n"); /* main loop */ while(1) { /* do nothing */ } }
/** * @fn int main( void ); * @brief Point d'entrée du programme * @return */ int main(void){ char ordre[50]; char cons[10]; int ref=18; int pwm=0; int fil=0; char BUF_RX[50]; char BUF_TX[1000]; int aux1; char *data_IL, *data_VO, *data_VI; //Optimisation du fonctionnement du CPU SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE); init(); intConfig(); uartPutString(" ****** * * ******* ****** *** ****** ** ****** *** ***\r\n"); uartPutString("* **** * * *** *** * *** * * * * **** * * * **** * * * *\r\n"); uartPutString("* * * * * * * *** * * * * * * * ** * * * * * * * *\r\n"); uartPutString("* * * * * * * ** * * *** * * * * **** * * *** * ** ** *\r\n"); uartPutString("* * * * * * * * * * * * * * * * * * * * * * * * * *\r\n"); uartPutString("* **** * * * * * * * * * * * **** * * * * * **** * * * *\r\n"); uartPutString(" ****** * * * * * * * * *** ****** * * * * ****** * * * *\r\n"); uartPutString("citroen corp. with Ixchel Intelligent Systems patnership\r\n"); strcpy(BUF_TX,"boost converter module interface. Enter help to know the supported commands\r\nboost:~# \0"); uartPutString(BUF_TX); while (1) {; if (flagTraitement) { flagTraitement = 0; // Acquisition ads7885Pic32Read( CHN_SPI, data_IL, data_VO, data_VI ); mesure[0][pMesure]=atoi(data_IL); mesure[1][pMesure]=atoi(data_VO); mesure[2][pMesure]=atoi(data_VI); pMesure++; if (pMesure >= TAILLE_MESURE) pMesure = 0; gpioLed(); // Calcul commande[pCommande] = fTransfert(consigne, mesure[0], commande); // // // Commande // pwmSet(commande[pCommande]); // pCommande++; // if (pCommande >= TAILLE_COMMANDE) // pCommande = 0;*/ if (flagAuto == 0){ pwmSet(pwm); } } if (flagReception) { uartPutChar(aux); if(aux=='\b'){ if(i>0) i--; } else if(aux!='\r'){ BUF_RX[i]=aux; i++; } else { BUF_RX[i]='\0'; uartPutChar('\r'); uartPutChar('\n'); i=0; // On reçoit l'ordre while(BUF_RX[i]!=' '){ ordre[i]=BUF_RX[i]; i++; } ordre[i]='\0'; i++; int j=0; while(BUF_RX[i]!='\0'){ cons[j]=BUF_RX[i]; i++; j++; } cons[j]='\0'; i=0; if(strcmp(ordre, "auto")==0){ strcpy(BUF_TX,"automatic mode is running\n\rchange voltage reference value with ref command\n\r"); flagAuto = 1; ref=18; } else if(strcmp(ordre, "manual")==0){ strcpy(BUF_TX,"pwm mode is running\n\rchange duty cycle value with pwm command\n\r"); flagAuto = 0; pwm=0; } else if(strcmp(ordre, "ref")==0){ sscanf(cons,"%i",&aux1); if((aux1!=18)&&(aux1!=24)&&(aux1!=30)&&(aux1!=36)){ strcpy(BUF_TX,"error: failed value\n\r"); } else { ref=aux1; sprintf(BUF_TX,"output voltage value is updated to %d\n\r",ref); } } else if(strcmp(ordre, "pwm")==0){ sscanf(cons,"%i",&aux1); if((aux1>=0)&&(aux1<=100)&&(strcmp(cons, "")!=0)){ sprintf(BUF_TX,"the duty cycle value is updated to %d%\n\r",aux1); pwm= (aux1*T3_TICK)/100; } else { strcpy(BUF_TX,"error: failed value\n\r"); } } else if(strcmp(ordre, "means")==0);//{ // break; // } else if(strcmp(ordre, "can")==0){ uartPutString("can controller configuration :\n\r"); sprintf(BUF_TX,"bus speed 250000 bps\n\r"); uartPutString(BUF_TX); sprintf(BUF_TX,"data length 8 bytes\n\r"); uartPutString(BUF_TX); sprintf(BUF_TX,"filter 0x%03X\n\r",fil); uartPutString(BUF_TX); strcpy(BUF_TX,"filter mask 0xFFF\n\r"); } else if(strcmp(ordre, "filter")==0){ if(strlen(cons)==3){ sscanf(cons,"%X",&fil); sprintf(BUF_TX,"can filter value is updated to 0x%03X\n\r",fil); } else { sprintf(BUF_TX,"error: failed value size= %d\n\r",strlen(cons)); } } else if(strcmp(ordre, "help")==0){ uartPutString("auto start automatic mode and stop manual mode\r\n"); uartPutString(" update voltage reference value with ref command\r\n"); uartPutString("manual start manual mode and stop automatic mode\r\n"); uartPutString(" update duty cycle value with pwm command\r\n"); uartPutString("ref update output voltage reference value\r\n"); uartPutString("pwm update duty cycle value\r\n"); uartPutString("means print currents analog values\r\n"); uartPutString("can print can controller configuration\r\n"); uartPutString("filter update can filter\r\n"); sprintf(BUF_TX,"help print supported commands\r\n"); } else if(strcmp(ordre, "")==0){ strcpy(BUF_TX,"\r\n"); } else{ strcpy(BUF_TX,"error: enter help to know the supported commands\n\r"); } uartPutString(BUF_TX); strcpy(BUF_TX,"boost:~# \0"); uartPutString(BUF_TX); } flagReception = 0; if (consigne < 0) consigne = 0; else if (consigne > 262143) consigne = 262143; } } close(); }
int main(void) { u08 c; char buffer[7]; int num=1; bool isFlowControlOn = true; bool isHexModeOn = false; ledsSet(1); ledsInit(); ledsSet(2); uartInit( UART_BAUD_SELECT( 9600, F_CPU ) ); ledsSet(3); uartFlowControlOn( true ); ledsSet(4); uartPutString("String stored in SRAM\n"); ledsSet(5); uartPutString("String stored in FLASH\n"); ledsSet(6); itoa( num, buffer, 10); // convert interger into string (decimal format) uartPutString(buffer); // and transmit string to UART uartPutString( "\n" ); ledsSet(7); //while ( !uartIsCharAvailable() ) { //do nothing //} //c = uartBlockingGetChar(); uartPutString( "You pressed: " ); //uartPutChar( c ); uartPutString( "\n" ); for(;;) { ledsSet(11); c = uartBlockingGetChar(); //_delay_ms( 100 ); ledsSet(12); if ( c == 'V' ) { uartPutString( "testSerial: " ); uartPutString( __DATE__ ); uartPutString( " " ); uartPutString( __TIME__ ); uartPutString( "\n" ); } else if ( c == 'B' ) { MCUCR = _BV(IVCE); MCUCR = _BV(IVSEL); //move interruptvectors to the boot sector sector asm volatile("jmp 0x3800"); } else if ( c == 'F' ) {
/** * @fn void dialogueUART( void *pvParameters ) * @brief Reçoit des ordres depuis le port série * @brief Se réveille lors de l'arrivée de données sur l'UART * @param pvParameters Pointeur sur un paramètre passé à la tâche */ void dialogueUART( void *pvParameters ) { int i = 0; // compteurs de boucle int j; // compteurs de boucle char BUF_RX[50]; // buffer de reception via l'uart char BUF_TX[100]; // buffer de transmission via l'uart int aux1; // variable tampon pour vérifier la validité avant de mettre dans pwm char ordre[50]; // variable tampon pour récupérer l'ordre envoyé par l'uart char cons[10]; // variable tampon pour récupérer la consigne suivant l'ordre // boucle d'excecution for(;;) { vTaskSuspend(xDialogueUARTHandle); if (aux == 0x1B && i == 0) { i = strlen(ordre)+ 1 + strlen(cons) + 1; sprintf (BUF_TX,"%s %s\r\n", ordre, cons); uartPutString(BUF_RX); } else { uartPutChar(aux); // renvoie d'aquittement // prise en compte de correction if (aux == '\b') { if(i > 0) { i--; uartPutChar(' '); uartPutChar('\b'); } //recupération de l'ordre caractere par caractere tant qu'il n'y a pas de retour chariot } else if (aux != '\r') { BUF_RX[i] = aux; i++; } else { // si aux = \r BUF_RX[i] = '\0'; uartPutChar('\r'); uartPutChar('\n'); i = 0; // Séparation ordre-consigne while ((BUF_RX[i] != ' ')&&(BUF_RX[i] != '\0')) { ordre[i] = BUF_RX[i]; i++; } ordre[i] = '\0'; // transformation de ordre en string j = 0; while (BUF_RX[i] != '\0') { cons[j] = BUF_RX[i]; i++; j++; } cons[j] = '\0'; // transformation de ordre en string i = 0; if(strcmp(ordre, "auto") == 0){ strcpy(BUF_TX,"automatic mode is running\n\rchange voltage reference value with ref command\n\r"); flagAuto = TRUE; ref = 180; } else if (strcmp(ordre, "manual") == 0) { strcpy(BUF_TX,"pwm mode is running\n\rchange duty cycle value with pwm command\n\r"); flagAuto = FALSE; pwm = 0; } else if (strcmp(ordre, "ref") == 0) { sscanf(cons,"%i",&aux1); if (flagAuto == FALSE) sprintf(BUF_TX,"manual mode is running, write manual before sending a new value for ref\n\r"); else if ((aux1 != 18)&&(aux1 != 24)&&(aux1 != 30)&&(aux1 != 36)) strcpy(BUF_TX,"error: failed value\n\r"); else { ref = aux1*10; sprintf(BUF_TX,"output voltage value is updated to %d\n\r",ref); } } else if (strcmp(ordre, "pwm") == 0){ sscanf(cons,"%i",&aux1); if (flagAuto == TRUE) sprintf(BUF_TX,"automatic mode is running, write manual before sending a new value for pwm\n\r"); else if ((aux1 >= 0) && (aux1 <= 100) && (strcmp(cons, "") != 0)) { sprintf(BUF_TX,"the duty cycle value is updated to %d%\n\r",aux1); pwm = aux1; } else strcpy(BUF_TX,"error: failed value\n\r"); } else if (strcmp(ordre, "meas") == 0) { sprintf(BUF_TX,"Courant d'entree : IL = %d A\n\r",mesure[0][pMesure]); uartPutString(BUF_TX); sprintf(BUF_TX,"Tension d'entree : VI = %d V\n\r",mesure[2][pMesure]); uartPutString(BUF_TX); sprintf(BUF_TX,"Tension de sortie : VO = %d V\n\r",mesure[1][pMesure]); // uartPutString(BUF_TX); } else if(strcmp(ordre, "can") == 0) { uartPutString("can controller configuration :\n\r"); sprintf(BUF_TX,"bus speed 250000 bps\n\r"); uartPutString(BUF_TX); sprintf(BUF_TX,"data length 8 bytes\n\r"); uartPutString(BUF_TX); sprintf(BUF_TX,"filter 0x%03X\n\r",fil); uartPutString(BUF_TX); strcpy(BUF_TX,"filter mask 0x7FF\n\r"); } else if (strcmp(ordre, "filter") == 0) { if(strlen(cons) == 3) { sscanf(cons,"%X",&fil); sprintf(BUF_TX,"can filter value is updated to \ 0x%03X\n\r",fil); } else sprintf(BUF_TX,"error: failed value size= %d\n\r",strlen(cons)); } else if (strcmp(ordre, "help") == 0) { uartPutString("auto start automatic mode and stop manual mode\r\n"); uartPutString(" update voltage reference value with ref command\r\n"); uartPutString("manual start manual mode and stop automatic mode\r\n"); uartPutString(" update duty cycle value with pwm command\r\n"); uartPutString("ref update output voltage reference value\r\n"); uartPutString("pwm update duty cycle value\r\n"); uartPutString("meas print currents analog values\r\n"); uartPutString("can print can controller configuration\r\n"); uartPutString("filter update can filter\r\n"); sprintf(BUF_TX,"help print supported commands\r\n"); } else if (strcmp(ordre, "") == 0) strcpy(BUF_TX,"\r\n"); else strcpy(BUF_TX,"error: enter help to know the supported \ commands\n\r"); uartPutString(BUF_TX); strcpy(BUF_TX,"boost:~# \0"); uartPutString(BUF_TX); }
static inline void uartPutStringCRLF( char* p_str ) { uartPutString( p_str ); uartPutString( "\r\n" ); }