Changeset 3a4ae6c in rtems for c/src/lib/libbsp/m68k/mvme136/clock
- Timestamp:
- 09/11/95 19:35:39 (27 years ago)
- Branches:
- 4.10, 4.11, 4.8, 4.9, 5, master
- Children:
- ced11f99
- Parents:
- 5072b07
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/m68k/mvme136/clock/ckinit.c
r5072b07 r3a4ae6c 21 21 #include <stdlib.h> 22 22 23 #include <rtems.h>24 23 #include <bsp.h> 25 #include < clockdrv.h>24 #include <rtems/libio.h> 26 25 #include <z8036.h> 27 26 … … 36 35 /* and trigger countdown */ 37 36 37 #define TIMER 0xfffb0000 38 #define RELOAD 0x24 /* clr IP & IUS,allow countdown */ 39 40 #define CLOCK_VECTOR 66 41 38 42 rtems_unsigned32 Clock_isrs; /* ISRs until next tick */ 39 volatile rtems_unsigned32 Clock_driver_ticks; 40 /* ticks since initialization */ 43 44 volatile rtems_unsigned32 Clock_driver_ticks; /* ticks since initialization */ 45 41 46 rtems_isr_entry Old_ticker; 42 47 43 rtems_device_driver Clock_initialize( 44 rtems_device_major_number major, 45 rtems_device_minor_number minor, 46 void *pargp, 47 rtems_id tid, 48 rtems_unsigned32 *rval 48 void Clock_exit( void ); 49 50 /* 51 * These are set by clock driver during its init 52 */ 53 54 rtems_device_major_number rtems_clock_major = ~0; 55 rtems_device_minor_number rtems_clock_minor; 56 57 /* 58 * ISR Handler 59 */ 60 61 rtems_isr Clock_isr( 62 rtems_vector_number vector 49 63 ) 50 64 { 51 Install_clock( Clock_isr );52 } 65 Clock_driver_ticks += 1; 66 ((volatile struct z8036_map *) TIMER)->CT1_CMD_STATUS = RELOAD; 53 67 54 void ReInstall_clock( 55 rtems_isr_entry clock_isr 56 ) 57 { 58 rtems_unsigned32 isrlevel; 59 60 rtems_interrupt_disable( isrlevel ); 61 (void) set_vector( clock_isr, 66, 1 ); 62 rtems_interrupt_enable( isrlevel ); 68 if ( Clock_isrs == 1 ) { 69 rtems_clock_tick(); 70 Clock_isrs = BSP_Configuration.microseconds_per_tick / 1000; 71 } 72 else 73 Clock_isrs -= 1; 63 74 } 64 75 … … 73 84 74 85 if ( BSP_Configuration.ticks_per_timeslice ) { 75 Old_ticker = (rtems_isr_entry) set_vector( clock_isr, 66, 1 );86 Old_ticker = (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 ); 76 87 timer = (struct z8036_map *) 0xfffb0000; 77 88 timer->MASTER_INTR = MICRVAL; 78 89 timer->CT1_MODE_SPEC = T1MSRVAL; 79 90 80 *((rtems_unsigned16 *)0xfffb0016) = MS_COUNT; /* write countdown value */ 81 /* 82 timer->CT1_TIME_CONST_MSB = (MS_COUNT >> 8); 83 timer->CT1_TIME_CONST_LSB = (MS_COUNT & 0xff); 84 */ 91 *((rtems_unsigned16 *)0xfffb0016) = MS_COUNT; /* write countdown value */ 92 93 /* 94 * timer->CT1_TIME_CONST_MSB = (MS_COUNT >> 8); 95 * timer->CT1_TIME_CONST_LSB = (MS_COUNT & 0xff); 96 */ 97 85 98 timer->MASTER_CFG = MCCRVAL; 86 99 timer->CT1_CMD_STATUS = T1CSRVAL; 87 100 88 /*89 * Enable interrupt via VME interrupt mask register90 */101 /* 102 * Enable interrupt via VME interrupt mask register 103 */ 91 104 (*(rtems_unsigned8 *)0xfffb0038) &= 0xfd; 92 93 105 94 106 atexit( Clock_exit ); 95 107 } 96 108 109 } 110 111 void ReInstall_clock( 112 rtems_isr_entry clock_isr 113 ) 114 { 115 rtems_unsigned32 isrlevel; 116 117 rtems_interrupt_disable( isrlevel ); 118 (void) set_vector( clock_isr, CLOCK_VECTOR, 1 ); 119 rtems_interrupt_enable( isrlevel ); 97 120 } 98 121 … … 110 133 } 111 134 } 135 136 rtems_device_driver Clock_initialize( 137 rtems_device_major_number major, 138 rtems_device_minor_number minor, 139 void *pargp 140 ) 141 { 142 Install_clock( Clock_isr ); 143 144 /* 145 * make major/minor avail to others such as shared memory driver 146 */ 147 148 rtems_clock_major = major; 149 rtems_clock_minor = minor; 150 151 return RTEMS_SUCCESSFUL; 152 } 153 154 rtems_device_driver Clock_control( 155 rtems_device_major_number major, 156 rtems_device_minor_number minor, 157 void *pargp 158 ) 159 { 160 rtems_libio_ioctl_args_t *args = pargp; 161 162 if (args == 0) 163 goto done; 164 165 /* 166 * This is hokey, but until we get a defined interface 167 * to do this, it will just be this simple... 168 */ 169 170 if (args->command == rtems_build_name('I', 'S', 'R', ' ')) 171 { 172 Clock_isr(CLOCK_VECTOR); 173 } 174 else if (args->command == rtems_build_name('N', 'E', 'W', ' ')) 175 { 176 ReInstall_clock(args->buffer); 177 } 178 179 done: 180 return RTEMS_SUCCESSFUL; 181 } 182
Note: See TracChangeset
for help on using the changeset viewer.