File indexing completed on 2025-05-11 08:23:45
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include <rtems.h>
0013 #include <bsp.h>
0014 #include <rtems/m68k/m68360.h>
0015
0016 #define CLOCK_VECTOR 120
0017 #define CLOCK_IRQ_LEVEL 4
0018
0019 char M360DefaultWatchdogFeeder = 1;
0020
0021
0022
0023
0024 static unsigned long rtems_nsec_per_tick;
0025 static unsigned long pit_nsec_per_tick;
0026 static unsigned long nsec;
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036 #define Clock_driver_support_at_tick(arg) \
0037 do { \
0038 nsec += pit_nsec_per_tick; \
0039 if (nsec >= rtems_nsec_per_tick) \
0040 return; \
0041 nsec -= rtems_nsec_per_tick; \
0042 m360.dpram0[0]; \
0043 if (M360DefaultWatchdogFeeder) { \
0044 m360.swsr = 0x55; \
0045 m360.swsr = 0xAA; \
0046 } \
0047 } while (0) \
0048
0049
0050
0051
0052 #define Clock_driver_support_install_isr( _new ) \
0053 set_vector(_new, CLOCK_VECTOR, 1)
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070 extern int m360_clock_rate;
0071
0072 #define Clock_driver_support_initialize_hardware() \
0073 do { \
0074 unsigned int divisor; \
0075 unsigned long nsec_per_chip_tick = 1000000000 / m360_clock_rate; \
0076 unsigned long nsec_per_pit_tick = 512 * nsec_per_chip_tick; \
0077 rtems_nsec_per_tick = rtems_configuration_get_microseconds_per_tick() * 1000; \
0078 divisor = rtems_nsec_per_tick / nsec_per_pit_tick; \
0079 if (divisor > 255) \
0080 divisor = 255; \
0081 else if (divisor == 0) \
0082 divisor = 1; \
0083 pit_nsec_per_tick = nsec_per_pit_tick * divisor; \
0084 m360.pitr &= ~0x1FF; \
0085 m360.picr = (CLOCK_IRQ_LEVEL << 8) | CLOCK_VECTOR; \
0086 m360.pitr |= divisor; \
0087 } while (0)
0088
0089 #define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
0090
0091 #include "../../../shared/dev/clock/clockimpl.h"