Rev 3 | Rev 8 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 3 | Rev 6 | ||
|---|---|---|---|
| Line 8... | Line 8... | ||
| 8 | 8 | ||
| 9 | void _init(void) |
9 | void _init(void) |
| 10 | { |
10 | { |
| 11 | 11 | ||
| 12 | } |
12 | } |
| - | 13 | ||
| - | 14 | ||
| - | 15 | ||
| - | 16 | #if OLD_ENGINEBAY |
|
| - | 17 | //----------------------------------------------------------- |
|
| - | 18 | // This is the 10Hz timer |
|
| - | 19 | ||
| - | 20 | void interrupt TimerISR1(void) { |
|
| - | 21 | TimerFlag = 1; |
|
| - | 22 | if (NoSerialInCTR < 5) { |
|
| - | 23 | NoSerialInCTR++; |
|
| - | 24 | if (NoSerialInCTR == 5) { |
|
| - | 25 | NoSerialIn = 1; |
|
| - | 26 | } |
|
| - | 27 | } |
|
| - | 28 | } |
|
| - | 29 | //----------------------------------------------------------- |
|
| - | 30 | ||
| - | 31 | ||
| - | 32 | volatile unsigned long RPM_Time[RPM_LIMIT]; |
|
| - | 33 | volatile unsigned long RPM_Count; // incremented every reading |
|
| - | 34 | ||
| - | 35 | void TimerISR0(void) { |
|
| - | 36 | // check the listing |
|
| - | 37 | asm volatile ("STMDB SP!, {r0-r4} "); |
|
| - | 38 | // sort out the captures |
|
| - | 39 | int stat = REG(TIMER0_IR); |
|
| - | 40 | if (stat & (1 << 4)) //CR0 |
|
| - | 41 | { |
|
| - | 42 | RPM_Time[RPM_Count++] = REG(TIMER0_CR0); |
|
| - | 43 | if (RPM_Count == RPM_LIMIT) { |
|
| - | 44 | RPM_Count = 0; |
|
| - | 45 | } |
|
| - | 46 | } |
|
| - | 47 | if (stat & (1 << 5)) //CR1 |
|
| - | 48 | { |
|
| - | 49 | // TDC_Time = REG(TIMER0_CR1); |
|
| - | 50 | // TDC_Count++; |
|
| - | 51 | } |
|
| - | 52 | ||
| - | 53 | REG(TIMER0_IR) = stat; // clear the interrupts just handled. |
|
| - | 54 | REG(VICVectAddr) = 0; // reset the VIC |
|
| - | 55 | asm volatile ("LDMIA SP!, {r0-r4} "); |
|
| - | 56 | asm volatile ("SUBS PC,lr,#4"); |
|
| - | 57 | } |
|
| - | 58 | ||
| - | 59 | //----------------------------------------------------------- |
|
| - | 60 | // UART management |
|
| - | 61 | // serial counter |
|
| - | 62 | #define THRE (1<<6) |
|
| - | 63 | #define RDR (1<<0) |
|
| - | 64 | #define BUFFSIZ 256 |
|
| - | 65 | ||
| - | 66 | volatile char txbuff[BUFFSIZ]; |
|
| - | 67 | volatile int txptr = 0; |
|
| - | 68 | volatile int txcnt = 0; |
|
| - | 69 | ||
| - | 70 | volatile char rxbuff[BUFFSIZ]; |
|
| - | 71 | volatile int rxptr = 0; |
|
| - | 72 | volatile int rxcnt = 0; |
|
| - | 73 | ||
| - | 74 | void Uart0ISR(void) __attribute__((naked)); |
|
| - | 75 | void Uart0ISR(void) __attribute__((noinline)); |
|
| - | 76 | void Uart0ISR(void) { |
|
| - | 77 | asm volatile ("STMDB SP!, {r0-r3} "); |
|
| - | 78 | int stat; |
|
| - | 79 | while (!((stat = REG(UART0_IIR)) & 1)) { // LSbit is inactive |
|
| - | 80 | switch (stat & 0x0E) { |
|
| - | 81 | case 4: |
|
| - | 82 | case 12: { |
|
| - | 83 | char c = REG(UART0_RBR); |
|
| - | 84 | ||
| - | 85 | NoSerialIn = NoSerialInCTR = 0; |
|
| - | 86 | ||
| - | 87 | if (rxcnt < (BUFFSIZ - 1)) { |
|
| - | 88 | rxbuff[(rxptr + rxcnt) % BUFFSIZ] = c; |
|
| - | 89 | rxcnt++; |
|
| - | 90 | } |
|
| - | 91 | } |
|
| - | 92 | break; |
|
| - | 93 | case 2: { |
|
| - | 94 | if (txcnt > 0) { |
|
| - | 95 | REG(UART0_THR) = txbuff[txptr]; |
|
| - | 96 | txcnt--; |
|
| - | 97 | txptr++; |
|
| - | 98 | txptr %= BUFFSIZ; |
|
| - | 99 | } else { |
|
| - | 100 | REG(UART0_IER) &= ~(1 << 1); // disable TX |
|
| - | 101 | } |
|
| - | 102 | } |
|
| - | 103 | break; |
|
| - | 104 | } |
|
| - | 105 | } |
|
| - | 106 | REG(VICVectAddr) = 0; // reset the VIC |
|
| - | 107 | asm volatile ("LDMIA SP!, {r0-r3} "); |
|
| - | 108 | asm volatile ("SUBS PC,lr,#4"); |
|
| - | 109 | } |
|
| - | 110 | ||
| - | 111 | int my_putchar(int c) { |
|
| - | 112 | int rc = 0; |
|
| - | 113 | { |
|
| - | 114 | STI; |
|
| - | 115 | if (!(REG(UART0_IER) & (1 << 1))) { |
|
| - | 116 | REG(UART0_IER) |= (1 << 1); |
|
| - | 117 | REG(UART0_THR) = c; |
|
| - | 118 | rc=1; |
|
| - | 119 | } else { |
|
| - | 120 | ||
| - | 121 | if (txcnt < (BUFFSIZ - 1)) { |
|
| - | 122 | txbuff[(txptr + txcnt) % BUFFSIZ] = c; |
|
| - | 123 | txcnt++; |
|
| - | 124 | rc = 1; |
|
| - | 125 | } |
|
| - | 126 | } |
|
| - | 127 | CLI; |
|
| - | 128 | } |
|
| - | 129 | return rc; |
|
| - | 130 | } |
|
| - | 131 | ||
| - | 132 | int my_getchar(void) { |
|
| - | 133 | ||
| - | 134 | int c = -1; |
|
| - | 135 | STI; |
|
| - | 136 | if (rxcnt) { |
|
| - | 137 | c = rxbuff[rxptr]; |
|
| - | 138 | rxcnt--; |
|
| - | 139 | rxptr++; |
|
| - | 140 | rxptr %= BUFFSIZ; |
|
| - | 141 | } |
|
| - | 142 | CLI; |
|
| - | 143 | return c; |
|
| - | 144 | } |
|
| - | 145 | ||
| - | 146 | ||
| - | 147 | ||
| - | 148 | #endif |
|