File indexing completed on 2025-05-11 08:23:50
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 #include <rtems.h>
0036 #include <bsp/irq.h>
0037 #include <bsp.h>
0038
0039
0040
0041 #define CLOCK_VECTOR TX4925_IRQ_TMR0
0042
0043 #define TX4925_TIMER_INTERVAL_MODE 1
0044 #define TX4925_TIMER_PULSE_MODE 2
0045 #define TX4925_TIMER_MODE TX4925_TIMER_INTERVAL_MODE
0046
0047 #if (TX4925_TIMER_MODE == TX4925_TIMER_INTERVAL_MODE)
0048 #define TX4925_TIMER_INTERRUPT_FLAG TIIS
0049 #define Clock_driver_support_initialize_hardware() \
0050 Initialize_timer0_in_interval_mode()
0051 #elif (TX4925_TIMER_MODE == TX4925_TIMER_PULSE_MODE)
0052 #define TX4925_TIMER_INTERRUPT_FLAG TPIBS
0053 #define Clock_driver_support_initialize_hardware() \
0054 Initialize_timer0_in_pulse_mode()
0055 #else
0056 #error "Build Error: need to select timer mode"
0057 #endif
0058
0059
0060 #define Clock_driver_support_install_isr( _new ) \
0061 rtems_interrupt_handler_install( CLOCK_VECTOR, "clock", 0, _new, NULL )
0062
0063
0064 #define Clock_driver_support_at_tick(arg) \
0065 do { \
0066 uint32_t interrupt_flag; \
0067 do { \
0068 int loop_count; \
0069 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_TISR, 0x0 ); \
0070 loop_count = 0; \
0071 do { \
0072 \
0073 interrupt_flag = TX4925_REG_READ( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_TISR ) & TX4925_TIMER_INTERRUPT_FLAG; \
0074 } while (interrupt_flag && (++loop_count < 10)); \
0075 } while(interrupt_flag); \
0076 } while(0)
0077
0078
0079
0080 #define Initialize_timer0_in_interval_mode() \
0081 do { \
0082 uint32_t temp; \
0083 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_TCR, 0x0 ); \
0084 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_CCDR, 0x0 ); \
0085 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_ITMR, TIMER_CLEAR_ENABLE_MASK ); \
0086 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_CPRA, 0x30d40 ); \
0087 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_TCR, 0xC0 ); \
0088 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_DM0, 0x0 ); \
0089 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_LVL2, 0x1000000 ); \
0090 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_MSK, 0x0 ); \
0091 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_DEN, 0x1 ); \
0092 temp = TX4925_REG_READ( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_ITMR ); \
0093 temp |= TIMER_INT_ENABLE_MASK; \
0094 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_ITMR, temp ); \
0095 } while(0)
0096
0097
0098
0099 #define Initialize_timer0_in_pulse_mode() \
0100 do { \
0101 uint32_t temp; \
0102 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_TCR, 0x0 ); \
0103 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_CCDR, 0x0 ); \
0104 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_PGMR, FFI ); \
0105 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_CPRA, 0x3e8 ); \
0106 \
0107 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_CPRB, 0x30d40 ); \
0108 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_TCR, 0xC1 ); \
0109 \
0110 \
0111 temp = TX4925_REG_READ( TX4925_REG_BASE, TX4925_CFG_PCFG ); \
0112 temp = (temp & ~ SELCHI) | SELTMR0; \
0113 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_CFG_PCFG, temp ); \
0114 \
0115 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_DM0, 0x0 ); \
0116 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_LVL2, 0x1000000 ); \
0117 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_MSK, 0x0 ); \
0118 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_IRQCTL_DEN, 0x1 ); \
0119 temp = TX4925_REG_READ( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_PGMR ); \
0120 temp |= TPIBE; \
0121 TX4925_REG_WRITE( TX4925_REG_BASE, TX4925_TIMER0_BASE + TX4925_TIMER_PGMR, temp ); \
0122 } while(0)
0123
0124
0125 #define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
0126
0127 #include "../../../shared/dev/clock/clockimpl.h"