![]() |
|
|||
File indexing completed on 2025-05-11 08:23:47
0001 /* SPDX-License-Identifier: BSD-2-Clause */ 0002 0003 /* 0004 * This routine initailizes the periodic interrupt timer on 0005 * the Motorola 68332. 0006 */ 0007 0008 /* 0009 * COPYRIGHT (c) 1989-2014. 0010 * On-Line Applications Research Corporation (OAR). 0011 * 0012 * Redistribution and use in source and binary forms, with or without 0013 * modification, are permitted provided that the following conditions 0014 * are met: 0015 * 1. Redistributions of source code must retain the above copyright 0016 * notice, this list of conditions and the following disclaimer. 0017 * 2. Redistributions in binary form must reproduce the above copyright 0018 * notice, this list of conditions and the following disclaimer in the 0019 * documentation and/or other materials provided with the distribution. 0020 * 0021 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 0022 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 0023 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 0024 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 0025 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 0026 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 0027 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 0028 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 0029 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 0030 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 0031 * POSSIBILITY OF SUCH DAMAGE. 0032 */ 0033 0034 #include <stdlib.h> 0035 #include <bsp.h> 0036 #include <mrm332.h> 0037 #include <rtems/clockdrv.h> 0038 #include <rtems/m68k/sim.h> 0039 0040 #define CLOCK_VECTOR MRM_PIV 0041 0042 uint32_t Clock_isrs; /* ISRs until next tick */ 0043 volatile uint32_t Clock_driver_ticks; /* ticks since initialization */ 0044 static rtems_isr_entry Old_ticker; 0045 0046 static void Clock_exit( void ); 0047 0048 static rtems_isr Clock_isr(rtems_vector_number vector) 0049 { 0050 Clock_driver_ticks += 1; 0051 0052 if ( Clock_isrs == 1 ) { 0053 rtems_clock_tick(); 0054 Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000; 0055 } 0056 else 0057 Clock_isrs -= 1; 0058 } 0059 0060 static void Install_clock(rtems_isr_entry clock_isr) 0061 { 0062 Clock_driver_ticks = 0; 0063 Clock_isrs = rtems_configuration_get_microseconds_per_tick() / 1000; 0064 0065 Old_ticker = (rtems_isr_entry) set_vector( clock_isr, CLOCK_VECTOR, 1 ); 0066 0067 /* enable 1mS interrupts */ 0068 *PITR = (unsigned short int)( SAM(0x09,0,PITM) );/* load counter */ 0069 *PICR = (unsigned short int) /* enable interrupt */ 0070 ( SAM(ISRL_PIT,8,PIRQL) | SAM(CLOCK_VECTOR,0,PIV) ); 0071 0072 atexit( Clock_exit ); 0073 } 0074 0075 void Clock_exit( void ) 0076 { 0077 /* shutdown the periodic interrupt */ 0078 *PICR = (unsigned short int) 0079 ( SAM(0,8,PIRQL) | SAM(CLOCK_VECTOR,0,PIV) ); 0080 /* ^^ zero disables interrupt */ 0081 0082 /* do not restore old vector */ 0083 } 0084 0085 void _Clock_Initialize( void ) 0086 { 0087 Install_clock( Clock_isr ); 0088 }
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |
![]() ![]() |