aboutsummaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorbnewbold <bnewbold@robocracy.org>2010-06-12 22:54:11 -0400
committerbnewbold <bnewbold@robocracy.org>2010-07-20 15:36:44 -0400
commitf06fcac502619bc7f6155aa75947dc4340efccd5 (patch)
treee2e727854044548072ae6555744d886e3d7300fd /examples
parent52cbd2f1a1557002f46355e0095400a09c267ff9 (diff)
downloadlibrambutan-f06fcac502619bc7f6155aa75947dc4340efccd5.tar.gz
librambutan-f06fcac502619bc7f6155aa75947dc4340efccd5.zip
good quality vga leaf logo; usb+systick disabled
refactored timers and added interrupt behavior. see notes and comments... also includes a crude vga hack that doesn't use timers.
Diffstat (limited to 'examples')
-rw-r--r--examples/test-timers.cpp174
-rw-r--r--examples/vga.cpp262
2 files changed, 436 insertions, 0 deletions
diff --git a/examples/test-timers.cpp b/examples/test-timers.cpp
new file mode 100644
index 0000000..c3e3cb9
--- /dev/null
+++ b/examples/test-timers.cpp
@@ -0,0 +1,174 @@
+// Sample main.cpp file. Blinks an LED, sends a message out USART2
+// and turns on PWM on pin 2
+
+#include "wirish.h"
+#include "timers.h"
+
+#define LED_PIN 13
+#define PWM_PIN 2
+
+void handler1(void);
+void handler2(void);
+void handler3(void);
+void handler4(void);
+
+void setup_test_timer(void);
+
+int toggle = 0;
+int timer = 1;
+int state = 3;
+int last_but = 0;
+
+int count1 = 0;
+int count2 = 0;
+int count3 = 0;
+int count4 = 0;
+uint16 rate1 = 1000;
+uint16 rate2 = 2000;
+uint16 rate3 = 3000;
+uint16 rate4 = 4000;
+uint16 val1 = 10000;
+uint16 val2 = 10000;
+uint16 val3 = 10000;
+uint16 val4 = 10000;
+
+void setup()
+{
+ /* Set up the LED to blink */
+ pinMode(LED_PIN, OUTPUT);
+
+ pinMode(38, INPUT);
+
+ /* Send a message out USART2 */
+ //SerialUSB.begin(9600);
+ SerialUSB.println("Begining timer test...");
+
+ /* Send a message out the usb virtual serial port */
+ //SerialUSB.println("Hello!");
+
+ timer = 1;
+ setup_test_timer();
+
+}
+
+
+void loop() {
+ toggle ^= 1;
+ digitalWrite(LED_PIN, toggle);
+ delay(800);
+
+
+ if(digitalRead(38) && !last_but) {
+ state++;
+ switch(state){
+ case 1:
+ SerialUSB.println("Testing Timer1 ---------------------------");
+ timer = 1;
+ setup_test_timer();
+ break;
+ case 2:
+ SerialUSB.println("Testing Timer2 ---------------------------");
+ timer_set_mode(timer,1,TIMER_DISABLED);
+ timer_set_mode(timer,2,TIMER_DISABLED);
+ timer_set_mode(timer,3,TIMER_DISABLED);
+ timer_set_mode(timer,4,TIMER_DISABLED);
+ timer_set_count(1,0);
+ timer_set_count(2,0);
+ timer_set_count(3,0);
+ timer_set_count(4,0);
+ timer = 2;
+ setup_test_timer();
+ break;
+ case 3:
+ SerialUSB.println("Testing Timer3 ---------------------------");
+ timer_set_mode(timer,1,TIMER_DISABLED);
+ timer_set_mode(timer,2,TIMER_DISABLED);
+ timer_set_mode(timer,3,TIMER_DISABLED);
+ timer_set_mode(timer,4,TIMER_DISABLED);
+ timer = 3;
+ setup_test_timer();
+ break;
+ case 4:
+ SerialUSB.println("Testing Timer4 ---------------------------");
+ timer_set_mode(timer,1,TIMER_DISABLED);
+ timer_set_mode(timer,2,TIMER_DISABLED);
+ timer_set_mode(timer,3,TIMER_DISABLED);
+ timer_set_mode(timer,4,TIMER_DISABLED);
+ timer = 4;
+ setup_test_timer();
+ break;
+ default:
+ state = 0;
+ timer_set_mode(timer,1,TIMER_DISABLED);
+ timer_set_mode(timer,2,TIMER_DISABLED);
+ timer_set_mode(timer,3,TIMER_DISABLED);
+ timer_set_mode(timer,4,TIMER_DISABLED);
+ timer = 0;
+ SerialUSB.println("Restarting -------------------------------");
+ }
+ }
+
+ SerialUSB.print("Doing ------------------ "); SerialUSB.println(timer,DEC);
+ if(timer!=0) { SerialUSB.print("CNT: "); SerialUSB.println(timer_get_count(timer),DEC); }
+ SerialUSB.print("Count1 : "); SerialUSB.println(count1,DEC);
+ SerialUSB.print("Count2 : "); SerialUSB.println(count2,DEC);
+ SerialUSB.print("Count3 : "); SerialUSB.println(count3,DEC);
+ SerialUSB.print("Count4 : "); SerialUSB.println(count4,DEC);
+ SerialUSB.println();
+ /*
+ SerialUSB.print("Status : "); SerialUSB.println(get_sr(),HEX);
+ */
+ last_but = digitalRead(38);
+}
+
+void setup_test_timer(void) {
+ timer_set_prescaler(timer,10000);
+ timer_set_mode(timer,1,TIMER_OUTPUTCOMPARE);
+ timer_set_mode(timer,2,TIMER_OUTPUTCOMPARE);
+ timer_set_mode(timer,3,TIMER_OUTPUTCOMPARE);
+ timer_set_mode(timer,4,TIMER_OUTPUTCOMPARE);
+ val1 = val2 = val3 = val4 = 10000;
+ timer_set_compare_value(timer,1,val1);
+ timer_set_compare_value(timer,2,val2);
+ timer_set_compare_value(timer,3,val3);
+ timer_set_compare_value(timer,4,val4);
+ timer_attach_interrupt(timer,1,handler1);
+ timer_attach_interrupt(timer,2,handler2);
+ timer_attach_interrupt(timer,3,handler3);
+ timer_attach_interrupt(timer,4,handler4);
+ count1 = count2 = count3 = count4 = 0;
+}
+
+void handler1(void) {
+ val1 += rate1;
+ timer_set_compare_value(timer,1,val1);
+ count1++;
+ //SerialUSB.print("CC3 Inter: "); SerialUSB.print(get_sr(),HEX);
+ // SerialUSB.print(", "); SerialUSB.println(get_sr_buff(),HEX);
+}
+void handler2(void) {
+ val2 += rate2;
+ timer_set_compare_value(timer,2,val2);
+ count2++;
+}
+void handler3(void) {
+ val3 += rate3;
+ timer_set_compare_value(timer,3,val3);
+ count3++;
+}
+void handler4(void) {
+ val4 += rate4;
+ timer_set_compare_value(timer,4,val4);
+ count4++;
+}
+
+
+int main(void) {
+ init();
+ setup();
+
+ while (1) {
+ loop();
+ }
+ return 0;
+}
diff --git a/examples/vga.cpp b/examples/vga.cpp
new file mode 100644
index 0000000..c2e61ae
--- /dev/null
+++ b/examples/vga.cpp
@@ -0,0 +1,262 @@
+
+#include "wirish.h"
+
+/*
+D5 PB6 - TIM4_CH1 I2C1_SCL - - Y
+D6 PA8 - TIM1_CH1 - USART1_CK - Y
+D7 PA9 - TIM1_CH2 - USART1_TX - Y
+D8 PA10 - TIM1_CH3 - USART1_RX - Y
+D9 PB7 - TIM4_CH2 I2C1_SDA - - Y
+*/
+
+//gpio_write_bit(GPIOB_BASE, 6, 1); // VGA_R
+//gpio_write_bit(GPIOB_BASE, 6, 0);
+
+//(GPIOA_BASE)->BSRR = BIT(8);
+//asm volatile("nop");
+//(GPIOA_BASE)->BRR = BIT(8);
+/*
+ gpio_write_bit(GPIOB_BASE, 6, 1); // VGA_R
+ gpio_write_bit(GPIOB_BASE, 6, 0);
+ gpio_write_bit(GPIOA_BASE, 8, 1); // VGA_G
+ gpio_write_bit(GPIOA_BASE, 8, 0);
+ gpio_write_bit(GPIOA_BASE, 9, 1); // VGA_B
+ gpio_write_bit(GPIOA_BASE, 9, 0);
+ gpio_write_bit(GPIOA_BASE, 10, 1); // VGA_V
+ gpio_write_bit(GPIOA_BASE, 10, 0);
+ gpio_write_bit(GPIOB_BASE, 7, 1); // VGA_H
+ gpio_write_bit(GPIOB_BASE, 7, 0);
+*/
+
+#define LED_PIN 13
+#define VGA_R 5 // B6
+#define VGA_G 6 // A8
+#define VGA_B 7 // A9
+#define VGA_V 11 // A6
+#define VGA_H 12 // A7
+#define VGA_R_HIGH (GPIOB_BASE)->BSRR = BIT(6)
+#define VGA_R_LOW (GPIOB_BASE)->BRR = BIT(6)
+#define VGA_G_HIGH (GPIOA_BASE)->BSRR = BIT(8)
+#define VGA_G_LOW (GPIOA_BASE)->BRR = BIT(8)
+#define VGA_B_HIGH (GPIOA_BASE)->BSRR = BIT(9)
+#define VGA_B_LOW (GPIOA_BASE)->BRR = BIT(9)
+#define VGA_V_HIGH (GPIOA_BASE)->BSRR = BIT(6)
+#define VGA_V_LOW (GPIOA_BASE)->BRR = BIT(6)
+#define VGA_H_HIGH (GPIOA_BASE)->BSRR = BIT(7)
+#define VGA_H_LOW (GPIOA_BASE)->BRR = BIT(7)
+
+void isr_porch(void);
+void isr_start(void);
+void isr_stop(void);
+void isr_update(void);
+
+void setup()
+{
+ pinMode(LED_PIN, OUTPUT);
+ digitalWrite(LED_PIN, 1);
+ pinMode(VGA_R, OUTPUT);
+ pinMode(VGA_G, OUTPUT);
+ pinMode(VGA_B, OUTPUT);
+ pinMode(VGA_V, OUTPUT);
+ pinMode(VGA_H, OUTPUT);
+
+ /* Send a message out USART2 */
+ Serial2.begin(9600);
+ Serial2.println("Video time...");
+
+
+ digitalWrite(VGA_R, 0);
+ digitalWrite(VGA_G, 0);
+ digitalWrite(VGA_B, 0);
+ digitalWrite(VGA_H,1);
+ digitalWrite(VGA_V,1);
+
+ timer_set_prescaler(4,0);
+ timer_set_mode(4, 1, TIMER_OUTPUTCOMPARE);
+ timer_set_mode(4, 2, TIMER_OUTPUTCOMPARE);
+ timer_set_mode(4, 3, TIMER_OUTPUTCOMPARE);
+ timer_set_mode(4, 4, TIMER_OUTPUTCOMPARE);
+ timer_set_reload(4, 2287);
+ timer_set_compare_value(4,1,200);
+ timer_set_compare_value(4,2,300);
+ timer_set_compare_value(4,3,2170); // 2219 max...
+ timer_set_compare_value(4,4,1);
+ timer_attach_interrupt(4,1,isr_porch);
+ timer_attach_interrupt(4,2,isr_start);
+ timer_attach_interrupt(4,3,isr_stop);
+ timer_attach_interrupt(4,4,isr_update);
+
+ timer_set_count(4,0);
+}
+
+int toggle = 0;
+uint16 x = 0;
+uint16 y = 0;
+uint8 v_active = 1;
+GPIO_Port *portb = GPIOB_BASE;
+
+void isr_porch(void) {
+ VGA_H_HIGH;
+ y++;
+ if(y>=523) {
+ y=1;
+ v_active = 1;
+ return;
+ }
+ if(y>=492) {
+ VGA_V_HIGH;
+ return;
+ }
+ if(y>=490) {
+ VGA_V_LOW;
+ return;
+ }
+ if(y>=479) { // 479
+ v_active = 0;
+ return;
+ }
+}
+
+uint8 logo[18][16] = {
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,},
+ {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,},
+ {0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,},
+ {0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,},
+ {0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,},
+ {0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,},
+ {0,0,1,0,0,1,0,1,0,1,0,0,1,0,0,0,},
+ {0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,0,},
+ {0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,},
+ {1,0,0,0,1,0,0,1,0,0,1,0,0,0,1,0,},
+ {1,0,0,0,0,1,0,1,0,1,0,0,0,0,1,0,},
+ {1,0,0,0,0,0,1,1,1,0,0,0,0,0,1,0,},
+ {0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,},
+ {0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0,},
+ {0,0,0,0,1,1,1,0,1,1,1,0,0,0,0,0,},
+ {0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,},
+ {0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,},
+ {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,}, };
+
+void isr_start(void) {
+ if(!v_active) { return; }
+ VGA_R_HIGH;
+ //delayMicroseconds(2);
+ //gpio_write_bit(GPIOA_BASE, 8, 1); // VGA_G
+ for(x=0; x<32; x++) {
+ if(logo[y/28][x/2]) {
+ VGA_G_HIGH;
+ VGA_B_HIGH;
+ } else {
+ VGA_G_LOW;
+ VGA_B_LOW;
+ }
+ }
+
+}
+void isr_stop(void) {
+ if(!v_active) { return; }
+ VGA_R_LOW;
+ VGA_G_LOW;
+ VGA_B_LOW;
+}
+void isr_update(void) {
+ VGA_H_LOW;
+}
+
+void loop() {
+ /*
+ toggle ^= 1;
+ digitalWrite(LED_PIN, toggle);
+ delay(100);
+ Serial2.println("HIHIHI!");
+ */
+ //for(y=0; y<480; y++) {
+ /*
+ for(y=0; y<160; y++) {
+ VGA_R_LOW;
+ VGA_H_LOW;
+ delayMicroseconds(3);
+ VGA_H_HIGH;
+ VGA_R_HIGH;
+ delayMicroseconds(8);
+ VGA_G_HIGH;
+ delayMicroseconds(10);
+ VGA_B_HIGH;
+ delayMicroseconds(10);
+ VGA_R_LOW;
+ VGA_B_LOW;
+ VGA_G_LOW;
+ //VGA_G_HIGH;
+ }
+ for(y=0; y<160; y++) {
+ VGA_R_LOW;
+ VGA_H_LOW;
+ delayMicroseconds(3);
+ VGA_H_HIGH;
+ VGA_G_HIGH;
+ delayMicroseconds(8);
+ VGA_R_HIGH;
+ delayMicroseconds(10);
+ VGA_B_HIGH;
+ delayMicroseconds(10);
+ VGA_R_LOW;
+ VGA_B_LOW;
+ VGA_G_LOW;
+ //VGA_G_HIGH;
+ }
+ for(y=0; y<160; y++) {
+ VGA_R_LOW;
+ VGA_H_LOW;
+ delayMicroseconds(3);
+ VGA_H_HIGH;
+ VGA_B_HIGH;
+ delayMicroseconds(8);
+ VGA_G_HIGH;
+ delayMicroseconds(10);
+ VGA_R_HIGH;
+ delayMicroseconds(10);
+ VGA_R_LOW;
+ VGA_B_LOW;
+ VGA_G_LOW;
+ //VGA_G_HIGH;
+ }
+ for(y=0; y<11; y++) {
+ VGA_R_LOW;
+ VGA_H_LOW;
+ delayMicroseconds(3);
+ VGA_R_LOW;
+ VGA_H_HIGH;
+ delayMicroseconds(28);
+ }
+ VGA_V_LOW;
+ for(y=0; y<2; y++) {
+ VGA_R_LOW;
+ VGA_H_LOW;
+ delayMicroseconds(3);
+ VGA_R_LOW;
+ VGA_H_HIGH;
+ delayMicroseconds(28);
+ }
+ VGA_V_HIGH;
+ for(y=0; y<30; y++) {
+ VGA_R_LOW;
+ VGA_H_LOW;
+ delayMicroseconds(3);
+ VGA_R_LOW;
+ VGA_H_HIGH;
+ delayMicroseconds(28);
+ }
+ */
+
+}
+
+
+int main(void) {
+ init();
+ setup();
+
+ while (1) {
+ loop();
+ }
+ return 0;
+}