/** * The main routine. */ int main(void) { unsigned char cnt = 0; unsigned char c; clock_init(); pin_reserve(PIN_1_1); pin_reserve(PIN_1_2); serial_init(BAUDRATE); setup(); for(;;) { c = serial_recv_blocking(); if(c == SCRATCH_DATA_REQUEST) { if(cnt++ == COMM_BLINK_RATE) { // blink COMM to show data was requested pin_toggle(COMM); cnt = 0; } read_samples(); xmit_samples(); } } return 0; }
int main(void) { clock_init(); pin_reserve(PIN_1_1); pin_reserve(PIN_1_2); serial_init(9600); cio_print("** ROCKETuC - librocketcore PIN test **\n\r"); dump_regs("initial"); // invalid port if(pin_setup(0x30, PIN_FUNCTION_OUTPUT) == PIN_STAT_ERR_INVALPORT) { cio_print("0x30 is an invalid port\n\r"); } // invalid pin if(pin_setup(0x2A, PIN_FUNCTION_OUTPUT) == PIN_STAT_ERR_INVALPIN) { cio_print("0x2A is an invalid pin\n\r"); } // P1.1 + P1.2 are reserved for UART1 if(pin_setup(PIN_1_1, PIN_FUNCTION_OUTPUT) == PIN_STAT_ERR_INVALPIN) { cio_print("0x11 is an invalid (reserved) pin\n\r"); } if(pin_setup(PIN_1_2, PIN_FUNCTION_OUTPUT) == PIN_STAT_ERR_INVALPIN) { cio_print("0x12 is an invalid (reserved) pin\n\r"); } // pins on port 2 do not support ADC int p; for(p = 0; p < 8; p++) { if(pin_setup(PIN_2_0 + p, PIN_FUNCTION_ANALOG_IN) == PIN_STAT_ERR_UNSUPFUNC) { cio_printf("0x2%i does not support ADC\n\r", p); } } // set P1.0 + P1.6 + P2.5 to output (the build in LEDs) pin_setup(PIN_1_0, PIN_FUNCTION_OUTPUT); pin_setup(PIN_1_6, PIN_FUNCTION_OUTPUT); pin_setup(PIN_2_5, PIN_FUNCTION_OUTPUT); dump_regs("p1.0+p1.6+p2.5 output"); // set P1.0 + P1.6 + P2.5 to HIGH pin_set(PIN_1_0); pin_set(PIN_1_6); pin_set(PIN_2_5); dump_regs("p1.0+p1.6+p2.5 set"); // read P1.0 + P1.6 + p2.5 states cio_printf("P1.0 is %x\n\r", pin_digital_read(PIN_1_0)); cio_printf("P1.6 is %x\n\r", pin_digital_read(PIN_1_6)); cio_printf("P2.5 is %x\n\r", pin_digital_read(PIN_2_5)); // clear P1.0 + p1.6 + p2.5 to LOW pin_clear(PIN_1_0); pin_clear(PIN_1_6); pin_clear(PIN_2_5); dump_regs("p1.0+p1.6+p2.5 clear"); // read P1.0 + P1.6 + 2.5 states cio_printf("P1.0 is %x\n\r", pin_digital_read(PIN_1_0)); cio_printf("P1.6 is %x\n\r", pin_digital_read(PIN_1_6)); cio_printf("P2.5 is %x\n\r", pin_digital_read(PIN_2_5)); // toggle P1.0 + P1.6 + P2.5 pin_toggle(PIN_1_0); pin_toggle(PIN_1_6); pin_toggle(PIN_2_5); dump_regs("p1.0+p1.6+p2.5 toggle"); // read P1.0 + P1.6 states cio_printf("P1.0 is %x\n\r", pin_digital_read(PIN_1_0)); cio_printf("P1.6 is %x\n\r", pin_digital_read(PIN_1_6)); cio_printf("P2.5 is %x\n\r", pin_digital_read(PIN_2_5)); // toggle P1.0 + P1.6 + P2.5 pin_toggle(PIN_1_0); pin_toggle(PIN_1_6); pin_toggle(PIN_2_5); dump_regs("p1.0+p1.6+p2.5 toggle"); // read P1.0 + P1.6 states cio_printf("P1.0 is %x\n\r", pin_digital_read(PIN_1_0)); cio_printf("P1.6 is %x\n\r", pin_digital_read(PIN_1_6)); cio_printf("P2.5 is %x\n\r", pin_digital_read(PIN_2_5)); // set P1.3 to input float pin_setup(PIN_1_3, PIN_FUNCTION_INPUT_FLOAT); dump_regs("p1.3 input float"); cio_print("Press button on P1.3 to continue ..."); while(pin_digital_read(PIN_1_3)) __asm__("nop"); cio_print(" OK\n\r"); // set P2.3 to input pull-down pin_setup(PIN_2_3, PIN_FUNCTION_INPUT_PULLDOWN); dump_regs("p2.3 input pull-down"); cio_print("Press button on P2.3 to continue ..."); while(!pin_digital_read(PIN_2_3)) __asm__("nop"); cio_print(" OK\n\r"); // set P2.4 to input pull-down pin_setup(PIN_2_4, PIN_FUNCTION_INPUT_PULLUP); dump_regs("p2.4 input pull-up"); cio_print("Press button on P2.4 to continue ..."); while(pin_digital_read(PIN_2_4)) __asm__("nop"); cio_print(" OK\n\r"); int pl = 0; cio_print("Press button on P1.3 for pulselength read ..."); delay(50000); pl = pin_pulselength_read(PIN_1_3); cio_printf(" OK, pl=%i\n\r", pl); cio_print("Press button on P2.3 for pulselength read ..."); delay(50000); pl = pin_pulselength_read(PIN_2_3); cio_printf(" OK, pl=%i\n\r", pl); cio_print("Press button on P2.4 for pulselength read ..."); delay(50000); pl = pin_pulselength_read(PIN_2_4); cio_printf(" OK, pl=%i\n\r", pl); pin_set(PIN_1_0); pin_clear(PIN_1_6); pin_clear(PIN_2_5); // set P1.5 to analog in int i = 0; cio_printf("setup 1.5 for analog in: %i\n\r", pin_setup(PIN_1_5, PIN_FUNCTION_ANALOG_IN)); dump_regs("p1.5 analog in"); int adcin1 = pin_analog_read(PIN_1_5); int adcin2 = 0; cio_printf("Analog read p1.5: %x\n\r", adcin1); // set P2.2 to PWM with period of 20ms and duty cycle of 7.5% cio_printf("setup 2.2 for PWM: %i\n\r", pin_setup(PIN_2_2, PIN_FUNCTION_PWM)); dump_regs("p2.2 PWM"); // only one of the two possible pins on port two are allowed to be set to PWM cio_printf("setup 2.1 for PWM: %i\n\r", pin_setup(PIN_2_1, PIN_FUNCTION_PWM)); // period pin_pwm_function(PIN_2_2, 20000); pin_pwm_control(PIN_2_2, adc2dc(adcin1)); while (1) { delay(); pin_toggle(PIN_1_0); pin_toggle(PIN_1_6); if(i++ % 2 == 0) { pin_toggle(PIN_2_5); } if(!pin_digital_read(PIN_1_3)) { pin_toggle(PIN_1_6); while(!pin_digital_read(PIN_1_3)) __asm__("nop"); } adcin2 = pin_analog_read(PIN_1_5); // only output ADC value if delta was more then 5 if(adcin2 - adcin1 > 5 || adcin1 - adcin2 > 5) { adcin1 = adcin2; cio_printf("Analog read at p1.5: %x (%i)\n\r", adcin2, adcin2); pin_pwm_control(PIN_2_2, adc2dc(adcin1)); } } return 0; }