Timer1 以 Nxp LPC2210 Timer1為例
\ defer.f
---------------------------------------------------------------
defer p! ' ! is p! \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
defer p@ ' @ is p@ \ 當I/O 非 memory MAP or 模擬晶片動作時 修改
\ VIC_Nxp2210.f
-----------------------------------------------------------
0xFFFFF000 constant VICIRQStatus
0xFFFFF004 constant VICFIQStatus
0xFFFFF008 constant VICRawIntr
0xFFFFF00C constant VICIntSelect
0xFFFFF010 constant VICIntEnable
0xFFFFF014 constant VICIntEnClr
0xFFFFF018 constant VICSoftInt
0xFFFFF01C constant VICSoftIntClr
0xFFFFF020 constant VICProtection
0xFFFFF030 constant VICVectAddr
0xFFFFF034 constant VICDefVectAddr
0xFFFFF100 constant VICVectAddr0
0xFFFFF104 constant VICVectAddr1
0xFFFFF108 constant VICVectAddr2
0xFFFFF10C constant VICVectAddr3
0xFFFFF110 constant VICVectAddr4
0xFFFFF114 constant VICVectAddr5
0xFFFFF118 constant VICVectAddr6
0xFFFFF11C constant VICVectAddr7
0xFFFFF120 constant VICVectAddr8
0xFFFFF128 constant VICVectAddr10
0xFFFFF12C constant VICVectAddr11
0xFFFFF130 constant VICVectAddr12
0xFFFFF134 constant VICVectAddr13
0xFFFFF138 constant VICVectAddr14
0xFFFFF13C constant VICVectAddr15
0xFFFFF200 constant VICVectCntl0
0xFFFFF204 constant VICVectCntl1
0xFFFFF208 constant VICVectCntl2
0xFFFFF20C constant VICVectCntl3
0xFFFFF210 constant VICVectCntl4
0xFFFFF214 constant VICVectCntl5
0xFFFFF218 constant VICVectCntl6
0xFFFFF21C constant VICVectCntl7
0xFFFFF220 constant VICVectCntl8
0xFFFFF224 constant VICVectCntl9
0xFFFFF228 constant VICVectCntl10
0xFFFFF22C constant VICVectCntl11
0xFFFFF230 constant VICVectCntl12
0xFFFFF234 constant VICVectCntl13
0xFFFFF23C constant VICVectCntl15
0x1 constant VIC_Mask_WDT
0x4 constant VIC_Mask_ICERx
0x8 constant VIC_Mask_ICETx
0x10 constant VIC_Mask_TIMER0
0x20 constant VIC_Mask_TIMER1
0x40 constant VIC_Mask_UART0
0x80 constant VIC_Mask_UART1
0x100 constant VIC_Mask_PWM
0x200 constant VIC_Mask_SPI0
0x400 constant VIC_Mask_SPI1
0x800 constant VIC_Mask_SSP
0x1000 constant VIC_Mask_PLL
0x2000 constant VIC_Mask_RTC
0x4000 constant VIC_Mask_EINT0
0x8000 constant VIC_Mask_EINT1
0x10000 constant VIC_Mask_EINT2
0x20000 constant VIC_Mask_EINT3
0x40000 constant VIC_Mask_ADC
0x0 constant EnableFIQ
0x20 constant EnableIRQ
EnableIRQ 0 or constant VIC_Hex_WDT
EnableIRQ 2 or constant VIC_Hex_ICERX
EnableIRQ 3 or constant VIC_Hex_ICETX
EnableIRQ 4 or constant VIC_Hex_TIMER0
EnableIRQ 5 or constant VIC_Hex_TIMER1
EnableIRQ 6 or constant VIC_Hex_UART0
EnableIRQ 7 or constant VIC_Hex_UART1
EnableIRQ 8 or constant VIC_Hex_PWM
EnableIRQ 9 or constant VIC_Hex_SPI0
EnableIRQ 10 or constant VIC_Hex_SPI1
EnableIRQ 11 or constant VIC_Hex_SSP
EnableIRQ 12 or constant VIC_Hex_PLL
EnableIRQ 13 or constant VIC_Hex_RTC
EnableIRQ 14 or constant VIC_Hex_EINT0
EnableIRQ 15 or constant VIC_Hex_EINT1
EnableIRQ 16 or constant VIC_Hex_EINT2
EnableIRQ 17 or constant VIC_Hex_EINT3
EnableIRQ 18 or constant VIC_Hex_ADC
\ Timer1_Nxp2210.f
-----------------------------------------------------------
0xE0008000 constant T1IR
0xE0008004 constant T1TCR
0xE0008008 constant T1TC
0xE000800C constant T1PR
0xE0008010 constant T1PC
0xE0008014 constant T1MCR
0xE0008018 constant T1MR0
0xE000801C constant T1MR1
0xE0008020 constant T1MR2
0xE0008024 constant T1MR3
0xE0008028 constant T1CCR
0xE000802C constant T1CR0
0xE0008030 constant T1CR1
0xE0008034 constant T1CR2
0xE0008038 constant T1CR3
0xE000803C constant T1EMR
\ Set_Timer1_Nxp2210.f
---------------------------------------------------------
: Set_Timer1( time --- )
0x0 T1TCR P!
0x0 T1TC P!
0x2 T1PR p!
0x0 T1PC p!
T1MR0 p! \ (PCLK/Sec)+1
0x5 T1MCR p!
0x01 T1TCR p!
;
: Set_VIC ( --- )
0x0 VICIntSelect p!
VIC_Mask_TIMER1 VICIntEnable p!
VIC_Hex_TIMER1 VICVectCntl0 p!
Timer1_ISR VICVectAddr0 p!
;
\ Timer1_ISR_Nxp2210.f
: Timer1_ISR ( --- )
\ Timer1程式處理_begin
\ Timer1程式處理_end
0x1 T1IR p!
0xFF VICVectAddr p!
;
\ demo.f
\ fload defer.f
\ fload VIC_Nxp2210.f
\ fload Timer1_Nxp2210.f
\ fload Set_Timer1_Nxp2210.f
\ fload Timer1_ISR_Nxp2210.f
: demo ( --- )
12000000 1000 / + 1 Set_Timer1 \ Timer1 to 1ms in PCLK=12MHz
Set_VIC
;