comparison packages/hal/powerpc/ec555/current/src/hal_diag.c @ 1397:9c818dd5d9fa

Updates for EC555 targets - from Bob Koninckx
author gthomas
date Mon, 24 Nov 2003 14:28:13 +0000
parents d2c90368aeef
children
comparison
equal deleted inserted replaced
1396:72d234fe1607 1397:9c818dd5d9fa
144 #define SCSR_FE 0x0002 // Framing error 144 #define SCSR_FE 0x0002 // Framing error
145 #define SCSR_PF 0x0001 // Parity error 145 #define SCSR_PF 0x0001 // Parity error
146 146
147 //----------------------------------------------------------------------------- 147 //-----------------------------------------------------------------------------
148 typedef struct { 148 typedef struct {
149 cyg_uint16* base; 149 cyg_uint16* base; // Base address of the register set
150 cyg_int32 msec_timeout; 150 cyg_int32 msec_timeout; // How long do we wait
151 int siu_vector; 151 int imb3_vector; // The vector on the IMB3. No need to worry
152 int imb3_vector; 152 // about SIU levels or vectors, that's the
153 unsigned int level; 153 // responsibility of the application
154 int baud_rate; 154 int baud_rate;
155 } channel_data_t; 155 } channel_data_t;
156 156
157 //----------------------------------------------------------------------------- 157 //-----------------------------------------------------------------------------
158 static void 158 static void
159 init_serial_channel(const channel_data_t* __ch_data) 159 init_serial_channel(const channel_data_t* __ch_data)
161 cyg_uint16 * base = __ch_data->base; 161 cyg_uint16 * base = __ch_data->base;
162 cyg_uint16 br; 162 cyg_uint16 br;
163 163
164 switch(__ch_data->baud_rate) 164 switch(__ch_data->baud_rate)
165 { 165 {
166 case 300: 166 case 300:
167 br = CYG_DEV_SERIAL_RS232_SCxBR_300; 167 br = CYG_DEV_SERIAL_RS232_SCxBR_300;
168 break; 168 break;
169 case 600: 169 case 600:
170 br = CYG_DEV_SERIAL_RS232_SCxBR_600; 170 br = CYG_DEV_SERIAL_RS232_SCxBR_600;
171 break; 171 break;
172 case 1200: 172 case 1200:
173 br = CYG_DEV_SERIAL_RS232_SCxBR_1200; 173 br = CYG_DEV_SERIAL_RS232_SCxBR_1200;
174 break; 174 break;
175 case 2400: 175 case 2400:
176 br = CYG_DEV_SERIAL_RS232_SCxBR_2400; 176 br = CYG_DEV_SERIAL_RS232_SCxBR_2400;
177 break; 177 break;
178 case 4800: 178 case 4800:
179 br = CYG_DEV_SERIAL_RS232_SCxBR_4800; 179 br = CYG_DEV_SERIAL_RS232_SCxBR_4800;
180 break; 180 break;
181 case 9600: 181 case 9600:
182 br = CYG_DEV_SERIAL_RS232_SCxBR_9600; 182 br = CYG_DEV_SERIAL_RS232_SCxBR_9600;
183 break; 183 break;
184 case 14400: 184 case 14400:
185 br = CYG_DEV_SERIAL_RS232_SCxBR_14400; 185 br = CYG_DEV_SERIAL_RS232_SCxBR_14400;
186 break; 186 break;
187 case 19200: 187 case 19200:
188 br = CYG_DEV_SERIAL_RS232_SCxBR_19200; 188 br = CYG_DEV_SERIAL_RS232_SCxBR_19200;
189 break; 189 break;
190 case 28800: 190 case 28800:
191 br = CYG_DEV_SERIAL_RS232_SCxBR_28800; 191 br = CYG_DEV_SERIAL_RS232_SCxBR_28800;
192 break; 192 break;
193 case 38400: 193 case 38400:
194 br = CYG_DEV_SERIAL_RS232_SCxBR_38400; 194 br = CYG_DEV_SERIAL_RS232_SCxBR_38400;
195 break; 195 break;
196 case 57600: 196 case 57600:
197 br = CYG_DEV_SERIAL_RS232_SCxBR_57600; 197 br = CYG_DEV_SERIAL_RS232_SCxBR_57600;
198 break; 198 break;
199 case 115200: 199 case 115200:
200 br = CYG_DEV_SERIAL_RS232_SCxBR_115200; 200 br = CYG_DEV_SERIAL_RS232_SCxBR_115200;
201 break; 201 break;
202 default: 202 default:
203 // Use the default if something unknown is requested 203 // Use the default if something unknown is requested
204 br = CYG_DEV_SERIAL_RS232_SCxBR_38400; 204 br = CYG_DEV_SERIAL_RS232_SCxBR_38400;
205 break; 205 break;
206 } 206 }
207 207
208 // 8-1-No parity 208 // 8-1-No parity, enable transmitter and receiver, leave interrupts
209 // as they are
209 HAL_WRITE_UINT16(base+CYG_DEV_SERIAL_RS232_SCCR1, (SCCR1_TE | SCCR1_RE)); 210 HAL_WRITE_UINT16(base+CYG_DEV_SERIAL_RS232_SCCR1, (SCCR1_TE | SCCR1_RE));
210 211
211 // Set baud rate 212 // Set baud rate
212 HAL_WRITE_UINT16(base+CYG_DEV_SERIAL_RS232_SCCR0, br); 213 HAL_WRITE_UINT16(base+CYG_DEV_SERIAL_RS232_SCCR0, br);
213 } 214 }
269 // to change the timeout parameter ... (Is this a bug in other) 270 // to change the timeout parameter ... (Is this a bug in other)
270 // PowerPC platform hals ?? You only see it when you really start from 271 // PowerPC platform hals ?? You only see it when you really start from
271 // flash .... 272 // flash ....
272 static channel_data_t channels[2] = { 273 static channel_data_t channels[2] = {
273 { (cyg_uint16*)CYG_DEV_SERIAL_BASE_A, 274 { (cyg_uint16*)CYG_DEV_SERIAL_BASE_A,
274 1000, 275 1000,
275 CYGNUM_HAL_INTERRUPT_SIU_LVL0,
276 CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX, 276 CYGNUM_HAL_INTERRUPT_IMB3_SCI0_RX,
277 0,
278 CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }, 277 CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD },
279 { (cyg_uint16*)CYG_DEV_SERIAL_BASE_B, 278 { (cyg_uint16*)CYG_DEV_SERIAL_BASE_B,
280 1000, 279 1000,
281 CYGNUM_HAL_INTERRUPT_SIU_LVL0,
282 CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX, 280 CYGNUM_HAL_INTERRUPT_IMB3_SCI1_RX,
283 0,
284 CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD } 281 CYGNUM_HAL_VIRTUAL_VECTOR_CONSOLE_CHANNEL_BAUD }
285 }; 282 };
286 283
287 static void 284 static void
288 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf, 285 cyg_hal_plf_serial_write(void* __ch_data, const cyg_uint8* __buf,
340 switch (__func) { 337 switch (__func) {
341 case __COMMCTL_GETBAUD: 338 case __COMMCTL_GETBAUD:
342 ret = chan->baud_rate; 339 ret = chan->baud_rate;
343 break; 340 break;
344 case __COMMCTL_SETBAUD: 341 case __COMMCTL_SETBAUD:
345 { 342 {
346 va_list ap; 343 va_list ap;
347 va_start(ap, __func); 344 va_start(ap, __func);
348 345
349 ret = chan->baud_rate; 346 ret = chan->baud_rate;
350 chan->baud_rate = va_arg(ap, cyg_int32); 347 chan->baud_rate = va_arg(ap, cyg_int32);
351 init_serial_channel(chan); 348 init_serial_channel(chan);
352 349
353 va_end(ap); 350 va_end(ap);
354 } 351 }
355 break; 352 break;
356 case __COMMCTL_IRQ_ENABLE: 353 case __COMMCTL_IRQ_ENABLE:
357 HAL_INTERRUPT_SET_LEVEL(chan->imb3_vector, chan->level); 354 // Just enable the interrupt on the IMB3. The debugged application is
358 HAL_INTERRUPT_UNMASK(chan->imb3_vector); 355 // must make sure that the interrupt is properly decoded
359 HAL_INTERRUPT_UNMASK(chan->siu_vector); 356 HAL_INTERRUPT_UNMASK(chan->imb3_vector);
360 irq_state = 1; 357 irq_state = 1;
361 break; 358 break;
362 case __COMMCTL_IRQ_DISABLE: 359 case __COMMCTL_IRQ_DISABLE:
360 // Same remark as above
363 ret = irq_state; 361 ret = irq_state;
364 irq_state = 0; 362 irq_state = 0;
365 HAL_INTERRUPT_MASK(chan->imb3_vector); 363 HAL_INTERRUPT_MASK(chan->imb3_vector);
366 HAL_INTERRUPT_MASK(chan->siu_vector);
367 break; 364 break;
368 case __COMMCTL_DBG_ISR_VECTOR: 365 case __COMMCTL_DBG_ISR_VECTOR:
369 ret = chan->siu_vector; 366 ret = chan->imb3_vector;
370 break; 367 break;
371 case __COMMCTL_SET_TIMEOUT: 368 case __COMMCTL_SET_TIMEOUT:
372 { 369 {
373 va_list ap; 370 va_list ap;
374 va_start(ap, __func); 371 va_start(ap, __func);
376 ret = chan->msec_timeout; 373 ret = chan->msec_timeout;
377 chan->msec_timeout = va_arg(ap, cyg_uint32); 374 chan->msec_timeout = va_arg(ap, cyg_uint32);
378 375
379 va_end(ap); 376 va_end(ap);
380 } 377 }
381 break; 378 break;
382 default: 379 default:
383 break; 380 break;
384 } 381 }
385 CYGARC_HAL_RESTORE_GP(); 382 CYGARC_HAL_RESTORE_GP();
386 return ret; 383 return ret;
410 c = cyg_hal_plf_serial_getc(__ch_data); 407 c = cyg_hal_plf_serial_getc(__ch_data);
411 408
412 if(cyg_hal_is_break(&c, 1)) 409 if(cyg_hal_is_break(&c, 1))
413 *__ctrlc = 1; 410 *__ctrlc = 1;
414 411
415 HAL_INTERRUPT_ACKNOWLEDGE(((channel_data_t *)__ch_data)->imb3_vector); 412 HAL_INTERRUPT_ACKNOWLEDGE(((channel_data_t *)__ch_data)->imb3_vector);
416 res = CYG_ISR_HANDLED; 413 res = CYG_ISR_HANDLED;
417 } 414 }
418 415
419 CYGARC_HAL_RESTORE_GP(); 416 CYGARC_HAL_RESTORE_GP();
420 return res; 417 return res;
421 } 418 }