/* * CPU例外ハンドラの設定 */ void define_exc(EXCNO excno, FP exchdr) { #ifndef VECTOR_IN_ROM arm_install_handler(excno,exchdr); #endif /* VECTOR_IN_ROM */ }
/* * ターゲットシステム依存の初期化 */ void sys_initialize() { int i; init_vector(); /* SRAMのリマップ。LPC2388共通 */ init_clock(); /* PLLの設定。システム固有 */ init_uart0(); /* UART0の初期化。システム固有 */ init_IRQ(); /* VICを初期化する。LPC2388共通 */ /* 必要なペリフェラルの電源を入れる(システム固有) */ /* なお、UART0とTIMER3はLPC2388共通で必要 */ PCONP |= 0x00800008; /* bit3:UART0, bit23:TIMER3 */ /* UART0のピンを設定 (LPC2388共通) */ PINSEL0 &= ~0xF0; /* bit 4-7だけをクリア */ PINSEL0 |= 0x50; /* UART入出力を割り当て */ /* * ARMのベクタテーブルへ割込みハンドラを登録(どのARMv4システムでも要求される) */ arm_install_handler(IRQ_Number,IRQ_Handler); /* * Memory Acceleration Moduleの設定 ( NXP社 UM10211 chapter 7 ) * Flashメモリのプリフェッチを使ってプログラム実行を高速化する */ MAMCR = 0; /* 念のためMAMをオフにする */ MAMTIM = 4; /* UM10211によれば、60MHz以上で動作するときは4に設定する */ MAMCR = 2; /* MAM機能をオンにする */ }
void dmx_init(void) { h3_gpio_fsel(dmx_data_direction_gpio_pin, GPIO_FSEL_OUTPUT); h3_gpio_clr(dmx_data_direction_gpio_pin); // 0 = input, 1 = output #ifdef LOCIG_ANALYZER h3_gpio_fsel(12, GPIO_FSEL_OUTPUT); h3_gpio_clr(12); // FIQ h3_gpio_fsel(11, GPIO_FSEL_OUTPUT); h3_gpio_clr(11); // BREAK h3_gpio_fsel(6, GPIO_FSEL_OUTPUT); h3_gpio_clr(6); // DR h3_gpio_fsel(14, GPIO_FSEL_OUTPUT); h3_gpio_clr(14); // SC h3_gpio_fsel(16, GPIO_FSEL_OUTPUT); h3_gpio_clr(16); // DATA #endif dmx_clear_data(); dmx_data_buffer_index_head = 0; dmx_data_buffer_index_tail = 0; rdm_data_buffer_index_head = 0; rdm_data_buffer_index_tail = 0; dmx_receive_state = IDLE; dmx_send_state = IDLE; dmx_send_always = false; irq_timer_init(); irq_timer_set(IRQ_TIMER_1, irq_timer1_dmx_receive); H3_TIMER->TMR1_INTV = 0xB71B00; // 1 second H3_TIMER->TMR1_CTRL &= ~(TIMER_CTRL_SINGLE_MODE); H3_TIMER->TMR1_CTRL |= (TIMER_CTRL_EN_START | TIMER_CTRL_RELOAD); // 0x3; #if (EXT_UART_NUMBER == 1) gic_fiq_config(H3_UART1_IRQn, 1); #elif (EXT_UART_NUMBER == 3) gic_fiq_config(H3_UART3_IRQn, 1); #else #error Unsupported UART device configured #endif uart_init(); __disable_fiq(); arm_install_handler((unsigned) fiq_dmx, ARM_VECTOR(ARM_VECTOR_FIQ)); }