diff packages/hal/mips/tx39/current/include/var_intr.h @ 99:97d9d85b42c0 ecos-sw-2000-06-07

Merge from eCos master repository on 2000-06-07-14:25:36-BST
author jlarmour
date Wed, 07 Jun 2000 14:10:34 +0000
parents 435cced73e2f
children e0c0827131d1
line wrap: on
line diff
--- a/packages/hal/mips/tx39/current/include/var_intr.h
+++ b/packages/hal/mips/tx39/current/include/var_intr.h
@@ -136,9 +136,19 @@ externC volatile CYG_BYTE hal_interrupt_
     if( _vector_ <= CYGNUM_HAL_INTERRUPT_7 ||                           \
         _vector_ == CYGNUM_HAL_INTERRUPT_0 )                            \
     {                                                                   \
-        cyg_uint32 _val_ = _vector_ + 1;                                \
-        if( _val_ == CYGNUM_HAL_INTERRUPT_0 + 1 ) _val_ = 0;            \
-        HAL_WRITE_UINT8( CYG_HAL_MIPS_TX3904_CConR+1, _val_);           \
+        cyg_uint32 _v_ = _vector_ + 1;                                  \
+        cyg_uint8 _reg_;                                                \
+                                                                        \
+        /* adjust vector to bit offset in CConR */                      \
+        if( _v_ == CYGNUM_HAL_INTERRUPT_0 + 1 ) _v_ = 0;                \
+                                                                        \
+        /* get CConR */                                                 \
+        HAL_READ_UINT8( CYG_HAL_MIPS_TX3904_CConR+1, _reg_ );           \
+                                                                        \
+        /* clear old value and set new */                               \
+        _reg_ &= ~(7 << 5);                                             \
+        _reg_ |= _v_ << 5;                                              \
+        HAL_WRITE_UINT8( CYG_HAL_MIPS_TX3904_CConR+1, _reg_);           \
     }                                                                   \
 }
 
@@ -147,10 +157,25 @@ externC volatile CYG_BYTE hal_interrupt_
     if( _vector_ <= CYGNUM_HAL_INTERRUPT_7 ||                           \
         _vector_ == CYGNUM_HAL_INTERRUPT_0 )                            \
     {                                                                   \
+        cyg_uint32 _v_ = _vector_ + 1;                                  \
         cyg_uint32 _val_ = 0;                                           \
+        cyg_uint16 _reg_;                                               \
+                                                                        \
+        /* adjust vector to bit offset in CConR */                      \
+        if( _v_ == CYGNUM_HAL_INTERRUPT_0 + 1 ) _v_ = 0;                \
+        _v_ <<= 1;                                                      \
+                                                                        \
+        /* set bits according to requirements */                        \
         if( _up_ ) _val_ |= 1;                                          \
         if( !(_level_) ) _val_ |= 2;                                    \
-        HAL_WRITE_UINT16( CYG_HAL_MIPS_TX3904_CConR+2, _val_ );         \
+                                                                        \
+        /* get CConR */                                                 \
+        HAL_READ_UINT16( CYG_HAL_MIPS_TX3904_CConR+2, _reg_ );          \
+                                                                        \
+        /* clear old value and set new */                               \
+        _reg_ &= ~(3 << _v_);                                           \
+        _reg_ |= _val_ << _v_;                                          \
+        HAL_WRITE_UINT16( CYG_HAL_MIPS_TX3904_CConR+2, _reg_ );         \
     }                                                                   \
 }