📄 hal_timer.lst
字号:
61 #define T1CTL_CH2IF 0x80
62 #define T1CTL_CH1IF 0x40
63 #define T1CTL_CH0IF 0x20
64 #define T1CTL_OVFIF 0x10
65
66 #define TIMIF_T1OVFIM 0x40
67 #define TIMIF_T4CH1IF 0x20
68 #define TIMIF_T4CH0IF 0x10
69 #define TIMIF_T4OVFIF 0x08
70 #define TIMIF_T3CH1IF 0x04
71 #define TIMIF_T3CH0IF 0x02
72 #define TIMIF_T3OVFIF 0x01
73
74 #define T34CTL_OVFIM 0x80
75
76 #define T134CCTL_IM 0x40 /* Interrupt Mask */
77 #define T134CCTL_CMP_BITS 0x38 /* Bits[5:3] == CMP[2:0] */
78 #define T134CCTL_MODE 0x04 /* Capture(0)/Compare(1) mode */
79 #define T134CCTL_CAP_BITS 0x03 /* Bits[1:0] == CAP[1:0] */
80
81 #define T134CCTL_CMP_OC 0x18 /* Set output on compare, clear at 0 */
82 #define T134CCTL_CAP_RE 0x01 /* Set input capture on rising edge */
83
84 /* Timer clock pre-scaler definitions for 16bit timer1 */
85 #define HAL_TIMER1_16_TC_DIV1 0x00 /* No clock pre-scaling */
86 #define HAL_TIMER1_16_TC_DIV8 0x04 /* Clock pre-scaled by 8 */
87 #define HAL_TIMER1_16_TC_DIV32 0x08 /* Clock pre-scaled by 32 */
88 #define HAL_TIMER1_16_TC_DIV128 0x0c /* Clock pre-scaled by 128 */
89 #define HAL_TIMER1_16_TC_BITS 0x0c /* Bits 3:2 */
90
91 /* Timer clock pre-scaler definitions for 8bit timer3 and timer4 */
92 #define HAL_TIMER34_8_TC_DIV1 0x00 /* No clock pre-scaling */
93 #define HAL_TIMER34_8_TC_DIV2 0x20 /* Clock pre-scaled by 2 */
94 #define HAL_TIMER34_8_TC_DIV4 0x40 /* Clock pre-scaled by 4 */
95 #define HAL_TIMER34_8_TC_DIV8 0x60 /* Clock pre-scaled by 8 */
96 #define HAL_TIMER34_8_TC_DIV16 0x80 /* Clock pre-scaled by 16 */
97 #define HAL_TIMER34_8_TC_DIV32 0xA0 /* Clock pre-scaled by 32 */
98 #define HAL_TIMER34_8_TC_DIV64 0xC0 /* Clock pre-scaled by 64 */
99 #define HAL_TIMER34_8_TC_DIV128 0xE0 /* Clock pre-scaled by 128 */
100 #define HAL_TIMER34_8_TC_BITS 0xE0 /* Bits 7:5 */
101
102 /* Operation Mode definitions */
103 #define HAL_TIMER1_OPMODE_STOP 0x00 /* Free Running Mode, Count from 0 to Max */
104 #define HAL_TIMER1_OPMODE_FREERUN 0x01 /* Free Running Mode, Count from 0 to Max */
105 #define HAL_TIMER1_OPMODE_MODULO 0x02 /* Modulo Mode, Count from 0 to CompareValue */
106 #define HAL_TIMER1_OPMODE_BITS 0x03 /* Bits 1:0 */
107
108 #define HAL_TIMER34_START 0x10 /* Timer3 and Timer4 have separate Start bit */
109 #define HAL_TIMER34_OPMODE_FREERUN 0x00 /* Free Running Mode, Count from 0 to Max */
110 #define HAL_TIMER34_OPMODE_MODULO 0x02 /* Modulo Mode, Count from 0 to CompareValue */
111 #define HAL_TIMER34_OPMODE_BITS 0x03 /* Bits 1:0 */
112
113 #define HAL_TIMER_MODE_STOP 0x03
114
115 /* Prescale settings */
116 #define HAL_TIMER1_16_PRESCALE HAL_TIMER1_16_TC_DIV128
117 #define HAL_TIMER1_16_PRESCALE_VAL 128
118 #define HAL_TIMER3_8_PRESCALE HAL_TIMER34_8_TC_DIV128
119 #define HAL_TIMER3_8_PRESCALE_VAL 128
120 #define HAL_TIMER4_8_PRESCALE HAL_TIMER34_8_TC_DIV128
121 #define HAL_TIMER4_8_PRESCALE_VAL 128
122
123 /* Clock settings */
124 #define HAL_TIMER_16MHZ 16
125 #define HAL_TIMER_32MHZ 32
126
127 /* Default all timers to use channel 0 */
128 #define TCHN_T1CCTL &(X_T1CCTL0)
129 #define TCHN_T1CCL &(X_T1CC0L)
130 #define TCHN_T1CCH &(X_T1CC0H)
131 #define TCNH_T1OVF &(X_TIMIF)
132 #define TCHN_T1OVFBIT TIMIF_T1OVFIM
133 #define TCHN_T1INTBIT IEN1_T1IE
134
135 #define TCHN_T3CCTL &(X_T3CCTL0)
136 #define TCHN_T3CCL &(X_T3CC0)
137 #define TCHN_T3CCH &(X_T3CC0)
138 #define TCNH_T3OVF &(X_T3CTL)
139 #define TCHN_T3OVFBIT T34CTL_OVFIM
140 #define TCHN_T3INTBIT IEN1_T3IE
141
142 #define TCHN_T4CCTL &(X_T4CCTL0)
143 #define TCHN_T4CCL &(X_T4CC0)
144 #define TCHN_T4CCH &(X_T4CC0)
145 #define TCNH_T4OVF &(X_T4CTL)
146 #define TCHN_T4OVFBIT T34CTL_OVFIM
147 #define TCHN_T4INTBIT IEN1_T4IE
148
149 /*********************************************************************
150 * TYPEDEFS
151 */
152 typedef struct
153 {
154 bool configured;
155 bool intEnable;
156 uint8 opMode;
157 uint8 channel;
158 uint8 channelMode;
159 uint8 prescale;
160 uint8 prescaleVal;
161 uint8 clock;
162 halTimerCBack_t callBackFunc;
163 } halTimerSettings_t;
164
165 typedef struct
166 {
167 uint8 volatile XDATA *TxCCTL;
168 uint8 volatile XDATA *TxCCH;
169 uint8 volatile XDATA *TxCCL;
170 uint8 volatile XDATA *TxOVF;
171 uint8 ovfbit;
172 uint8 intbit;
173 } halTimerChannel_t;
174
175 /*********************************************************************
176 * GLOBAL VARIABLES
177 */
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
178 static halTimerSettings_t halTimerRecord[HW_TIMER_MAX];
\ ??halTimerRecord:
\ 000000 DS 33
\ In segment XDATA_Z, align 1, keep-with-next
\ 000000 REQUIRE __INIT_XDATA_Z
179 static halTimerChannel_t halTimerChannel[HW_TIMER_MAX];
\ ??halTimerChannel:
\ 000000 DS 30
180
181 /*********************************************************************
182 * FUNCTIONS - External
183 */
184
185 /*********************************************************************
186 * FUNCTIONS - Local
187 */
188 uint8 halTimerSetCount (uint8 cc2430id, uint32 timePerTick);
189 uint8 halTimerSetPrescale (uint8 cc2430id, uint8 prescale);
190 uint8 halTimerSetOpMode (uint8 cc2430id, uint8 opMode);
191 uint8 halTimerSetChannelMode (uint8 cc2430id, uint8 channelMode);
192 void halTimerSendCallBack (uint8 timerId, uint8 channel, uint8 channelMode);
193 uint8 halTimerRemap (uint8 timerId);
194 void halProcessTimer1 (void);
195 void halProcessTimer3 (void);
196 void halProcessTimer4 (void);
197
198
199 /*********************************************************************
200 * FUNCTIONS - API
201 */
202
203 /*********************************************************************
204 * @fn HalTimerInit
205 *
206 * @brief Initialize Timer Service
207 *
208 * @param None
209 *
210 * @return None
211 */
\ In segment BANKED_CODE, align 1, keep-with-next
212 void HalTimerInit (void)
\ HalTimerInit:
213 {
\ 000000 C082 PUSH DPL
\ 000002 C083 PUSH DPH
\ 000004 ; Saved register size: 2
\ 000004 ; Auto size: 0
214 T1CCTL0 = 0; /* Make sure interrupts are disabled */
\ 000004 75E500 MOV 0xe5,#0x0
215 T1CCTL1 = 0; /* Make sure interrupts are disabled */
\ 000007 75E600 MOV 0xe6,#0x0
216 T1CCTL2 = 0; /* Make sure interrupts are disabled */
\ 00000A 75E700 MOV 0xe7,#0x0
217 T3CCTL0 = 0; /* Make sure interrupts are disabled */
\ 00000D 75CC00 MOV 0xcc,#0x0
218 T3CCTL1 = 0; /* Make sure interrupts are disabled */
\ 000010 75CE00 MOV 0xce,#0x0
219 T4CCTL0 = 0; /* Make sure interrupts are disabled */
\ 000013 75EC00 MOV 0xec,#0x0
220 T4CCTL1 = 0; /* Make sure interrupts are disabled */
\ 000016 75EE00 MOV 0xee,#0x0
221
222 /* Setup prescale & clock for timer0 */
223 halTimerRecord[HW_TIMER_1].prescale = HAL_TIMER1_16_PRESCALE;
\ 000019 740C MOV A,#0xc
\ 00001B 90.... MOV DPTR,#(??halTimerRecord + 5)
\ 00001E F0 MOVX @DPTR,A
224 halTimerRecord[HW_TIMER_1].clock = HAL_TIMER_32MHZ;
\ 00001F 7420 MOV A,#0x20
\ 000021 90.... MOV DPTR,#(??halTimerRecord + 7)
\ 000024 F0 MOVX @DPTR,A
225 halTimerRecord[HW_TIMER_1].prescaleVal = HAL_TIMER1_16_PRESCALE_VAL;
\ 000025 7480 MOV A,#-0x80
\ 000027 90.... MOV DPTR,#(??halTimerRecord + 6)
\ 00002A F0 MOVX @DPTR,A
226
227 /* Setup prescale & clock for timer2 */
228 halTimerRecord[HW_TIMER_3].prescale = HAL_TIMER3_8_PRESCALE;
\ 00002B 74E0 MOV A,#-0x20
\ 00002D 90.... MOV DPTR,#(??halTimerRecord + 16)
\ 000030 F0 MOVX @DPTR,A
229 halTimerRecord[HW_TIMER_3].clock = HAL_TIMER_32MHZ;
\ 000031 7420 MOV A,#0x20
\ 000033 90.... MOV DPTR,#(??halTimerRecord + 18)
\ 000036 F0 MOVX @DPTR,A
230 halTimerRecord[HW_TIMER_3].prescaleVal = HAL_TIMER3_8_PRESCALE_VAL;
\ 000037 7480 MOV A,#-0x80
\ 000039 90.... MOV DPTR,#(??halTimerRecord + 17)
\ 00003C F0 MOVX @DPTR,A
231
232 /* Setup prescale & clock for timer3 */
233 halTimerRecord[HW_TIMER_4].prescale = HAL_TIMER4_8_PRESCALE;
\ 00003D 74E0 MOV A,#-0x20
\ 00003F 90.... MOV DPTR,#(??halTimerRecord + 27)
\ 000042 F0 MOVX @DPTR,A
234 halTimerRecord[HW_TIMER_4].clock = HAL_TIMER_32MHZ;
\ 000043 7420 MOV A,#0x20
\ 000045 90.... MOV DPTR,#(??halTimerRecord + 29)
\ 000048 F0 MOVX @DPTR,A
235 halTimerRecord[HW_TIMER_4].prescaleVal = HAL_TIMER4_8_PRESCALE_VAL;
\ 000049 7480 MOV A,#-0x80
\ 00004B 90.... MOV DPTR,#(??halTimerRecord + 28)
\ 00004E F0 MOVX @DPTR,A
236
237 /* Setup Timer1 Channel structure */
238 halTimerChannel[HW_TIMER_1].TxCCTL = TCHN_T1CCTL;
\ 00004F 90.... MOV DPTR,#??halTimerChannel
\ 000052 74E5 MOV A,#-0x1b
\ 000054 12.... LCALL ??Subroutine0_0 & 0xFFFF
239 halTimerChannel[HW_TIMER_1].TxCCL = TCHN_T1CCL;
\ ??CrossCallReturnLabel_0:
\ 000057 90.... MOV DPTR,#(??halTimerChannel + 4)
\ 00005A 74DA MOV A,#-0x26
\ 00005C 12.... LCALL ??Subroutine0_0 & 0xFFFF
240 halTimerChannel[HW_TIMER_1].TxCCH = TCHN_T1CCH;
\ ??CrossCallReturnLabel_1:
\ 00005F 90.... MOV DPTR,#(??halTimerChannel + 2)
\ 000062 74DB MOV A,#-0x25
\ 000064 12.... LCALL ??Subroutine0_0 & 0xFFFF
241 halTimerChannel[HW_TIMER_1].TxOVF = TCNH_T1OVF;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -