/******************************************* INITIALIZE *******************************************/ int main(void) { WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; serial_init(9600); __dint(); // Enable global interrupts /******************************************* MAIN LOOP *******************************************/ for(;;) { int j = 0; // Char array counter char cmd_line[90] = { 0 }; // Init empty array cio_print((char *) "$ "); // Display prompt char c = cio_getc(); // Wait for a character while(c != '\r') { // until return sent then ... if(c == 0x08) { // was it the delete key? if(j != 0) { // cursor NOT at start? cmd_line[--j] = 0; // delete key logic cio_printc(0x08); cio_printc(' '); cio_printc(0x08); } } else { // otherwise ... cmd_line[j++] = c; cio_printc(c); // echo received char } c = cio_getc(); // Wait for another } cio_print((char *) "\n\n\r"); // Delimit command result switch(shell_process(cmd_line)) // Execute specified shell command { // and handle any errors case SHELL_PROCESS_ERR_CMD_UNKN: cio_print((char *) "ERROR, unknown command given\n\r"); break; case SHELL_PROCESS_ERR_ARGS_LEN: cio_print((char *) "ERROR, an arguement is too lengthy\n\r"); break; case SHELL_PROCESS_ERR_ARGS_MAX: cio_print((char *) "ERROR, too many arguements given\n\r"); break; default: break; } cio_print((char *) "\n"); // Delimit before prompt } return 0; }
/******************************************* INITIALIZE *******************************************/ void main(void) { //Basic prep WDTCTL = WDTPW + WDTHOLD; //Stop Watchdog TImer BCSCTL1 = CALBC1_1MHZ; //Clocks DCOCTL = CALDCO_1MHZ; P1REN = BIT3; //turn on pull-resistor on 0b0001000 P1OUT |= BIT3; //powers pin3 (button) P1IE = BIT3; //enables p1 interrupt on pin 1.3 P1IES |= BIT3; //sets interrupt on high to low P1IFG &= ~BIT3; //clears interrupt flag //Prep 1st PWM channel (X AXIS) TA0CCTL1 = OUTMOD_7; // TA0CCR1 reset/set TA0CTL = TASSEL_2 + MC_1; // SMCLK + upmode //upmode(MC_1): the Timer repeatedly counts from 0 to the value set in register TACCR0) TACCR0 = PWM_PRD-1; //set pwm period TACCR1 = 0; //set TA0CCR1 PWM Duty Cycle P1DIR |= BIT6; //Pin 1.6 set as output P1SEL |= BIT6; //Set Pin 1.6 for pwm use //Prep 2nd PWM channel (Y AXIS) TA1CCTL1 = OUTMOD_7; //set/reset mode TA1CTL = TASSEL_2 + MC_1; //SMCLK + upmode TA1CCR0 = PWM_PRD-1; //set pwm period TA1CCR1 = 0; //set TA0CCR1_ pwm duty cycle P2DIR |= BIT2 | BIT3; //set as output P2OUT |= BIT2; P2SEL |= BIT2; //Set pin 2.2 for pwm use serial_init(9600); // set serial clockrate __enable_interrupt(); // Enable global interrupts /******************************************* MAIN LOOP *******************************************/ for(;;) { int j = 0; // Char array counter char cmd_line[255] = {0}; // Init empty array cio_print((char *) "$ "); // Display prompt char c = cio_getc(); // Wait for a character while(c != '\r') { // until return sent then ... if(c == 0x08) { // was it the delete key? if(j != 0) { // cursor NOT at start? cmd_line[--j] = 0; cio_printc(0x08); cio_printc(' '); cio_printc(0x08); } // delete key logic } else { // otherwise ... cmd_line[j++] = c; cio_printc(c); // echo received char } c = cio_getc(); // Wait for another } cio_print((char *) "\n\n\r"); // Delimit command result switch(shell_process(cmd_line)) // Execute specified shell command { // and handle any errors case SHELL_PROCESS_ERR_CMD_UNKN: cio_print((char *) "ERROR, unknown command given\n\r"); break; case SHELL_PROCESS_ERR_ARGS_LEN: cio_print((char *) "ERROR, an arguement is too lengthy\n\r"); break; case SHELL_PROCESS_ERR_ARGS_MAX: cio_print((char *) "ERROR, too many arguements given\n\r"); break; default: break; } cio_print((char *) "\n"); // Delimit before prompt } }