Deleted.

Committer:
QL
Date:
Tue Feb 15 20:13:34 2011 +0000
Revision:
0:9601fa787c8b
Child:
2:27716f570c3d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
QL 0:9601fa787c8b 1 //////////////////////////////////////////////////////////////////////////////
QL 0:9601fa787c8b 2 // Model: pelican.qm
QL 0:9601fa787c8b 3 // File: ./bsp.cpp
QL 0:9601fa787c8b 4 //
QL 0:9601fa787c8b 5 // This file has been generated automatically by QP Modeler (QM).
QL 0:9601fa787c8b 6 // DO NOT EDIT THIS FILE MANUALLY.
QL 0:9601fa787c8b 7 //
QL 0:9601fa787c8b 8 // Please visit www.state-machine.com/qm for more information.
QL 0:9601fa787c8b 9 //////////////////////////////////////////////////////////////////////////////
QL 0:9601fa787c8b 10 #include "qp_port.h"
QL 0:9601fa787c8b 11 #include "pelican.h"
QL 0:9601fa787c8b 12 #include "bsp.h"
QL 0:9601fa787c8b 13 #include "LPC17xx.h"
QL 0:9601fa787c8b 14
QL 0:9601fa787c8b 15 Q_DEFINE_THIS_FILE
QL 0:9601fa787c8b 16
QL 0:9601fa787c8b 17 // Local-scope objects -------------------------------------------------------
QL 0:9601fa787c8b 18 enum ISR_Priorities { // ISR priorities starting from the highest urgency
QL 0:9601fa787c8b 19 GPIOPORTA_PRIO,
QL 0:9601fa787c8b 20 SYSTICK_PRIO,
QL 0:9601fa787c8b 21 // ...
QL 0:9601fa787c8b 22 };
QL 0:9601fa787c8b 23
QL 0:9601fa787c8b 24 #define LED_PORT LPC_GPIO1
QL 0:9601fa787c8b 25 #define LED1_BIT (1U << 18)
QL 0:9601fa787c8b 26 #define LED2_BIT (1U << 20)
QL 0:9601fa787c8b 27 #define LED3_BIT (1U << 21)
QL 0:9601fa787c8b 28 #define LED4_BIT (1U << 23)
QL 0:9601fa787c8b 29
QL 0:9601fa787c8b 30 #ifdef Q_SPY
QL 0:9601fa787c8b 31 #include "mbed.h" // mbed is used only for the built-in serial
QL 0:9601fa787c8b 32
QL 0:9601fa787c8b 33 QSTimeCtr l_tickTime;
QL 0:9601fa787c8b 34 QSTimeCtr l_tickPeriod;
QL 0:9601fa787c8b 35
QL 0:9601fa787c8b 36 #define QSPY_BAUD_RATE 115200
QL 0:9601fa787c8b 37
QL 0:9601fa787c8b 38 enum AppRecords { // application-specific trace records
QL 0:9601fa787c8b 39 PELICAN_STAT = QS_USER
QL 0:9601fa787c8b 40 };
QL 0:9601fa787c8b 41
QL 0:9601fa787c8b 42 Serial l_qspy(USBTX, USBRX);
QL 0:9601fa787c8b 43 #endif
QL 0:9601fa787c8b 44
QL 0:9601fa787c8b 45 //............................................................................
QL 0:9601fa787c8b 46 extern "C" void SysTick_Handler(void) {
QL 0:9601fa787c8b 47 QK_ISR_ENTRY(); // inform the QK kernel of entering the ISR
QL 0:9601fa787c8b 48
QL 0:9601fa787c8b 49 #ifdef Q_SPY
QL 0:9601fa787c8b 50 uint32_t volatile dummy = SysTick->CTRL; // clear the COUNTFLAG in SysTick
QL 0:9601fa787c8b 51 l_tickTime += l_tickPeriod; // account for the clock rollover
QL 0:9601fa787c8b 52 #endif
QL 0:9601fa787c8b 53
QL 0:9601fa787c8b 54 QF::tick(); // process all armed time events
QL 0:9601fa787c8b 55
QL 0:9601fa787c8b 56 QK_ISR_EXIT(); // inform the QK kernel of exiting the ISR
QL 0:9601fa787c8b 57 }
QL 0:9601fa787c8b 58
QL 0:9601fa787c8b 59 //............................................................................
QL 0:9601fa787c8b 60 void BSP_init(void) {
QL 0:9601fa787c8b 61 SystemInit(); // initialize the clocking system
QL 0:9601fa787c8b 62
QL 0:9601fa787c8b 63 // set LED port to output
QL 0:9601fa787c8b 64 LED_PORT->FIODIR |= (LED1_BIT | LED2_BIT | LED3_BIT | LED4_BIT);
QL 0:9601fa787c8b 65
QL 0:9601fa787c8b 66 // clear the LEDs
QL 0:9601fa787c8b 67 LED_PORT->FIOCLR = (LED1_BIT | LED2_BIT | LED3_BIT | LED4_BIT);
QL 0:9601fa787c8b 68
QL 0:9601fa787c8b 69 if (QS_INIT((void *)0) == 0) { // initialize the QS software tracing
QL 0:9601fa787c8b 70 Q_ERROR();
QL 0:9601fa787c8b 71 }
QL 0:9601fa787c8b 72 }
QL 0:9601fa787c8b 73 //............................................................................
QL 0:9601fa787c8b 74 void BSP_signalCars(BSP_CarsSignal sig) {
QL 0:9601fa787c8b 75 switch (sig) {
QL 0:9601fa787c8b 76 case CARS_RED:
QL 0:9601fa787c8b 77 LED_PORT->FIOSET = LED1_BIT; // turn the LED1 on
QL 0:9601fa787c8b 78 LED_PORT->FIOCLR = LED2_BIT | LED3_BIT; // turn the LED2&3 off
QL 0:9601fa787c8b 79 break;
QL 0:9601fa787c8b 80 case CARS_YELLOW:
QL 0:9601fa787c8b 81 LED_PORT->FIOSET = LED2_BIT; // turn the LED2 on
QL 0:9601fa787c8b 82 LED_PORT->FIOCLR = LED1_BIT | LED3_BIT; // turn the LED1&3 off
QL 0:9601fa787c8b 83 break;
QL 0:9601fa787c8b 84 case CARS_GREEN:
QL 0:9601fa787c8b 85 LED_PORT->FIOSET = LED3_BIT; // turn the LED3 on
QL 0:9601fa787c8b 86 LED_PORT->FIOCLR = LED1_BIT | LED2_BIT; // turn the LED1&2 off
QL 0:9601fa787c8b 87 break;
QL 0:9601fa787c8b 88 case CARS_BLANK:
QL 0:9601fa787c8b 89 LED_PORT->FIOCLR = LED1_BIT | LED2_BIT | LED3_BIT; //turn all off
QL 0:9601fa787c8b 90 break;
QL 0:9601fa787c8b 91 }
QL 0:9601fa787c8b 92 }
QL 0:9601fa787c8b 93 //............................................................................
QL 0:9601fa787c8b 94 void BSP_signalPeds(BSP_PedsSignal sig) {
QL 0:9601fa787c8b 95 switch (sig) {
QL 0:9601fa787c8b 96 case PEDS_DONT_WALK:
QL 0:9601fa787c8b 97 LED_PORT->FIOSET = LED4_BIT; // turn the LED4 on
QL 0:9601fa787c8b 98 break;
QL 0:9601fa787c8b 99 case PEDS_WALK:
QL 0:9601fa787c8b 100 LED_PORT->FIOCLR = LED4_BIT; // turn the LED4 off
QL 0:9601fa787c8b 101 break;
QL 0:9601fa787c8b 102 case PEDS_BLANK:
QL 0:9601fa787c8b 103 LED_PORT->FIOCLR = LED4_BIT; // turn the LED4 off
QL 0:9601fa787c8b 104 break;
QL 0:9601fa787c8b 105 }
QL 0:9601fa787c8b 106 }
QL 0:9601fa787c8b 107 //............................................................................
QL 0:9601fa787c8b 108 void BSP_showState(char const *state) {
QL 0:9601fa787c8b 109 QS_BEGIN(PELICAN_STAT, AO_Pelican) // application-specific record
QL 0:9601fa787c8b 110 QS_STR(state); // state string
QL 0:9601fa787c8b 111 QS_END()
QL 0:9601fa787c8b 112 }
QL 0:9601fa787c8b 113
QL 0:9601fa787c8b 114 //............................................................................
QL 0:9601fa787c8b 115 void QF::onStartup(void) {
QL 0:9601fa787c8b 116 // set up the SysTick timer to fire at BSP_TICKS_PER_SEC rate
QL 0:9601fa787c8b 117 SysTick_Config(SystemCoreClock / BSP_TICKS_PER_SEC);
QL 0:9601fa787c8b 118
QL 0:9601fa787c8b 119 // set priorities of all interrupts in the system...
QL 0:9601fa787c8b 120 NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
QL 0:9601fa787c8b 121 NVIC_SetPriority(EINT0_IRQn, GPIOPORTA_PRIO);
QL 0:9601fa787c8b 122
QL 0:9601fa787c8b 123 NVIC_EnableIRQ(EINT0_IRQn);
QL 0:9601fa787c8b 124 }
QL 0:9601fa787c8b 125 //............................................................................
QL 0:9601fa787c8b 126 void QF::onCleanup(void) {
QL 0:9601fa787c8b 127 }
QL 0:9601fa787c8b 128 //............................................................................
QL 0:9601fa787c8b 129 void QK::onIdle(void) {
QL 0:9601fa787c8b 130 #ifdef Q_SPY
QL 0:9601fa787c8b 131 if (l_qspy.writeable()) {
QL 0:9601fa787c8b 132 QF_INT_LOCK(dummy);
QL 0:9601fa787c8b 133 uint16_t b = QS::getByte();
QL 0:9601fa787c8b 134 QF_INT_UNLOCK(dummy);
QL 0:9601fa787c8b 135 if (b != QS_EOD) {
QL 0:9601fa787c8b 136 l_qspy.putc((uint8_t)b);
QL 0:9601fa787c8b 137 }
QL 0:9601fa787c8b 138 }
QL 0:9601fa787c8b 139 #else
QL 0:9601fa787c8b 140 // put the CPU and peripherals to the low-power mode
QL 0:9601fa787c8b 141 // you might need to customize the clock management for your application,
QL 0:9601fa787c8b 142 // see the datasheet for your particular Cortex-M3 MCU.
QL 0:9601fa787c8b 143 __WFI();
QL 0:9601fa787c8b 144 #endif
QL 0:9601fa787c8b 145 }
QL 0:9601fa787c8b 146
QL 0:9601fa787c8b 147 //............................................................................
QL 0:9601fa787c8b 148 void Q_onAssert(char const Q_ROM * const Q_ROM_VAR file, int line) {
QL 0:9601fa787c8b 149 (void)file; // avoid compiler warning
QL 0:9601fa787c8b 150 (void)line; // avoid compiler warning
QL 0:9601fa787c8b 151 QS_BEGIN_(QS_ASSERT, 0, 0)
QL 0:9601fa787c8b 152 QS_TIME_(); // time stamp
QL 0:9601fa787c8b 153 QS_U16_((uint16_t)line); // the line number
QL 0:9601fa787c8b 154 QS_STR_(file); // the file name
QL 0:9601fa787c8b 155 QS_END_()
QL 0:9601fa787c8b 156 QS::onFlush();
QL 0:9601fa787c8b 157
QL 0:9601fa787c8b 158 QF_INT_LOCK(dummy); // make sure that all interrupts are disabled
QL 0:9601fa787c8b 159 // light up all LEDs
QL 0:9601fa787c8b 160 LED_PORT->FIOSET = (LED1_BIT | LED2_BIT | LED3_BIT | LED4_BIT);
QL 0:9601fa787c8b 161
QL 0:9601fa787c8b 162 for (;;) { // NOTE: replace the loop with reset for final version
QL 0:9601fa787c8b 163 }
QL 0:9601fa787c8b 164 }
QL 0:9601fa787c8b 165
QL 0:9601fa787c8b 166 //----------------------------------------------------------------------------
QL 0:9601fa787c8b 167 #ifdef Q_SPY
QL 0:9601fa787c8b 168 //............................................................................
QL 0:9601fa787c8b 169 uint8_t QS::onStartup(void const *arg) {
QL 0:9601fa787c8b 170 static uint8_t qsBuf[6*256]; // buffer for Quantum Spy
QL 0:9601fa787c8b 171 initBuf(qsBuf, sizeof(qsBuf));
QL 0:9601fa787c8b 172
QL 0:9601fa787c8b 173 l_qspy.baud(QSPY_BAUD_RATE);
QL 0:9601fa787c8b 174
QL 0:9601fa787c8b 175 l_tickPeriod = SystemCoreClock / BSP_TICKS_PER_SEC;
QL 0:9601fa787c8b 176 l_tickTime = l_tickPeriod; // to start the timestamp at zero
QL 0:9601fa787c8b 177
QL 0:9601fa787c8b 178 // setup the QS filters...
QL 0:9601fa787c8b 179 QS_FILTER_ON(QS_ALL_RECORDS);
QL 0:9601fa787c8b 180
QL 0:9601fa787c8b 181 // QS_FILTER_OFF(QS_QEP_STATE_EMPTY);
QL 0:9601fa787c8b 182 // QS_FILTER_OFF(QS_QEP_STATE_ENTRY);
QL 0:9601fa787c8b 183 // QS_FILTER_OFF(QS_QEP_STATE_EXIT);
QL 0:9601fa787c8b 184 // QS_FILTER_OFF(QS_QEP_STATE_INIT);
QL 0:9601fa787c8b 185 // QS_FILTER_OFF(QS_QEP_INIT_TRAN);
QL 0:9601fa787c8b 186 // QS_FILTER_OFF(QS_QEP_INTERN_TRAN);
QL 0:9601fa787c8b 187 // QS_FILTER_OFF(QS_QEP_TRAN);
QL 0:9601fa787c8b 188 // QS_FILTER_OFF(QS_QEP_IGNORED);
QL 0:9601fa787c8b 189
QL 0:9601fa787c8b 190 // QS_FILTER_OFF(QS_QF_ACTIVE_ADD);
QL 0:9601fa787c8b 191 // QS_FILTER_OFF(QS_QF_ACTIVE_REMOVE);
QL 0:9601fa787c8b 192 // QS_FILTER_OFF(QS_QF_ACTIVE_SUBSCRIBE);
QL 0:9601fa787c8b 193 // QS_FILTER_OFF(QS_QF_ACTIVE_UNSUBSCRIBE);
QL 0:9601fa787c8b 194 // QS_FILTER_OFF(QS_QF_ACTIVE_POST_FIFO);
QL 0:9601fa787c8b 195 // QS_FILTER_OFF(QS_QF_ACTIVE_POST_LIFO);
QL 0:9601fa787c8b 196 // QS_FILTER_OFF(QS_QF_ACTIVE_GET);
QL 0:9601fa787c8b 197 // QS_FILTER_OFF(QS_QF_ACTIVE_GET_LAST);
QL 0:9601fa787c8b 198 // QS_FILTER_OFF(QS_QF_EQUEUE_INIT);
QL 0:9601fa787c8b 199 // QS_FILTER_OFF(QS_QF_EQUEUE_POST_FIFO);
QL 0:9601fa787c8b 200 // QS_FILTER_OFF(QS_QF_EQUEUE_POST_LIFO);
QL 0:9601fa787c8b 201 // QS_FILTER_OFF(QS_QF_EQUEUE_GET);
QL 0:9601fa787c8b 202 // QS_FILTER_OFF(QS_QF_EQUEUE_GET_LAST);
QL 0:9601fa787c8b 203 // QS_FILTER_OFF(QS_QF_MPOOL_INIT);
QL 0:9601fa787c8b 204 // QS_FILTER_OFF(QS_QF_MPOOL_GET);
QL 0:9601fa787c8b 205 // QS_FILTER_OFF(QS_QF_MPOOL_PUT);
QL 0:9601fa787c8b 206 // QS_FILTER_OFF(QS_QF_PUBLISH);
QL 0:9601fa787c8b 207 // QS_FILTER_OFF(QS_QF_NEW);
QL 0:9601fa787c8b 208 // QS_FILTER_OFF(QS_QF_GC_ATTEMPT);
QL 0:9601fa787c8b 209 // QS_FILTER_OFF(QS_QF_GC);
QL 0:9601fa787c8b 210 QS_FILTER_OFF(QS_QF_TICK);
QL 0:9601fa787c8b 211 // QS_FILTER_OFF(QS_QF_TIMEEVT_ARM);
QL 0:9601fa787c8b 212 // QS_FILTER_OFF(QS_QF_TIMEEVT_AUTO_DISARM);
QL 0:9601fa787c8b 213 // QS_FILTER_OFF(QS_QF_TIMEEVT_DISARM_ATTEMPT);
QL 0:9601fa787c8b 214 // QS_FILTER_OFF(QS_QF_TIMEEVT_DISARM);
QL 0:9601fa787c8b 215 // QS_FILTER_OFF(QS_QF_TIMEEVT_REARM);
QL 0:9601fa787c8b 216 // QS_FILTER_OFF(QS_QF_TIMEEVT_POST);
QL 0:9601fa787c8b 217 QS_FILTER_OFF(QS_QF_INT_LOCK);
QL 0:9601fa787c8b 218 QS_FILTER_OFF(QS_QF_INT_UNLOCK);
QL 0:9601fa787c8b 219 QS_FILTER_OFF(QS_QF_ISR_ENTRY);
QL 0:9601fa787c8b 220 QS_FILTER_OFF(QS_QF_ISR_EXIT);
QL 0:9601fa787c8b 221
QL 0:9601fa787c8b 222 // QS_FILTER_OFF(QS_QK_MUTEX_LOCK);
QL 0:9601fa787c8b 223 // QS_FILTER_OFF(QS_QK_MUTEX_UNLOCK);
QL 0:9601fa787c8b 224 // QS_FILTER_OFF(QS_QK_SCHEDULE);
QL 0:9601fa787c8b 225
QL 0:9601fa787c8b 226 return (uint8_t)1; // return success
QL 0:9601fa787c8b 227 }
QL 0:9601fa787c8b 228 //............................................................................
QL 0:9601fa787c8b 229 void QS::onCleanup(void) {
QL 0:9601fa787c8b 230 }
QL 0:9601fa787c8b 231 //............................................................................
QL 0:9601fa787c8b 232 QSTimeCtr QS::onGetTime(void) { // invoked with interrupts locked
QL 0:9601fa787c8b 233 if ((SysTick->CTRL & 0x00000100) == 0) { // COUNTFLAG no set?
QL 0:9601fa787c8b 234 return l_tickTime - (QSTimeCtr)SysTick->VAL;
QL 0:9601fa787c8b 235 }
QL 0:9601fa787c8b 236 else { // the rollover occured, but the SysTick_ISR did not run yet
QL 0:9601fa787c8b 237 return l_tickTime + l_tickPeriod - (QSTimeCtr)SysTick->VAL;
QL 0:9601fa787c8b 238 }
QL 0:9601fa787c8b 239 }
QL 0:9601fa787c8b 240 //............................................................................
QL 0:9601fa787c8b 241 void QS::onFlush(void) {
QL 0:9601fa787c8b 242 uint16_t b;
QL 0:9601fa787c8b 243 QF_INT_LOCK(dummy);
QL 0:9601fa787c8b 244 while ((b = QS::getByte()) != QS_EOD) {
QL 0:9601fa787c8b 245 while (!l_qspy.writeable()) { // wait until serial port is writable
QL 0:9601fa787c8b 246 }
QL 0:9601fa787c8b 247 l_qspy.putc((uint8_t)b);
QL 0:9601fa787c8b 248 }
QL 0:9601fa787c8b 249 QF_INT_UNLOCK(dummy);
QL 0:9601fa787c8b 250 }
QL 0:9601fa787c8b 251 #endif // Q_SPY
QL 0:9601fa787c8b 252 //----------------------------------------------------------------------------