📄 f34x_uart0_interrupt.lst
字号:
C51 COMPILER V7.06 F34X_UART0_INTERRUPT 02/03/2009 16:53:57 PAGE 4
179 1
180 1 }
181
182 //-----------------------------------------------------------------------------
183 // Initialization Subroutines
184 //-----------------------------------------------------------------------------
185
186 //-----------------------------------------------------------------------------
187 // PORT_Init
188 //-----------------------------------------------------------------------------
189 //
190 // Return Value : None
191 // Parameters : None
192 //
193 // Configure the Crossbar and GPIO ports.
194 //
195 // P0.4 digital push-pull UART TX
196 // P0.5 digital open-drain UART RX
197 //
198 //-----------------------------------------------------------------------------
199
200 void PORT_Init (void)
201 {
202 1 P0MDIN&=~0x09;
203 1 P0MDOUT |= 0xd4; // Enable UTX as push-pull output
204 1 XBR0 = 0x01; // Enable UART on P0.4(TX) and P0.5(RX)
205 1 XBR1 = 0x40; // Enable crossbar and weak pull-ups
206 1 }
207
208 //-----------------------------------------------------------------------------
209 // SYSCLK_Init
210 //-----------------------------------------------------------------------------
211 //
212 // Return Value : None
213 // Parameters : None
214 //
215 // This routine initializes the system clock to use the internal oscillator
216 // at its maximum frequency.
217 // Also enables the Missing Clock Detector.
218 //-----------------------------------------------------------------------------
219
220 void SYSCLK_Init (void)
221 {
222 1 OSCICN |= 0x03; // Configure internal oscillator for
223 1 // its maximum frequency
224 1 RSTSRC = 0x04; // Enable missing clock detector
225 1 }
226
227 //-----------------------------------------------------------------------------
228 // UART0_Init
229 //-----------------------------------------------------------------------------
230 //
231 // Return Value : None
232 // Parameters : None
233 //
234 // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
235 //-----------------------------------------------------------------------------
236
237 void UART0_Init (void)
238 {
239 1 SCON0 = 0x10; // SCON0: 8-bit variable bit rate
240 1 // level of STOP bit is ignored
C51 COMPILER V7.06 F34X_UART0_INTERRUPT 02/03/2009 16:53:57 PAGE 5
241 1 // RX enabled
242 1 // ninth bits are zeros
243 1 // clear RI0 and TI0 bits
244 1 if (SYSCLK/BAUDRATE/2/256 < 1) {
245 2 TH1 = -(SYSCLK/BAUDRATE/2);
246 2 CKCON &= ~0x0B; // T1M = 1; SCA1:0 = xx
247 2 CKCON |= 0x08;
248 2 } else if (SYSCLK/BAUDRATE/2/256 < 4) {
249 2 TH1 = -(SYSCLK/BAUDRATE/2/4);
250 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 01
251 2 CKCON |= 0x01;
252 2 } else if (SYSCLK/BAUDRATE/2/256 < 12) {
253 2 TH1 = -(SYSCLK/BAUDRATE/2/12);
254 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 00
255 2 } else {
256 2 TH1 = -(SYSCLK/BAUDRATE/2/48);
257 2 CKCON &= ~0x0B; // T1M = 0; SCA1:0 = 10
258 2 CKCON |= 0x02;
259 2 }
260 1
261 1 TL1 = TH1; // init Timer1
262 1 TMOD &= ~0xf0; // TMOD: timer 1 in 8-bit autoreload
263 1 TMOD |= 0x20;
264 1 TR1 = 1; // START Timer1
265 1 TX_Ready = 1; // Flag showing that UART can transmit
266 1 IP |= 0x10; // Make UART high priority
267 1 ES0 = 1; // Enable UART0 interrupts
268 1
269 1 }
270
271 //-----------------------------------------------------------------------------
272 // Interrupt Service Routines
273 //-----------------------------------------------------------------------------
274
275 //-----------------------------------------------------------------------------
276 // UART0_Interrupt
277 //-----------------------------------------------------------------------------
278 //
279 // This routine is invoked whenever a character is entered or displayed on the
280 // Hyperterminal.
281 //
282 //-----------------------------------------------------------------------------
283
284 void UART0_Interrupt (void) interrupt 4
285 {
286 1 if (RI0 == 1)
287 1 {
288 2 // if( UART_Buffer_Size == 0) { // If new word is entered
289 2 // UART_Input_First = 0; }
290 2
291 2 RI0 = 0; // Clear interrupt flag
292 2
293 2 txBuffer[1] = SBUF0; // Read a character from UART
294 2
295 2 send_num++; //发送数据个数累加
296 2 TI_CC_SPIStrobe(TI_CCxxx0_SIDLE); //进入IDLE模式
297 2 txBuffer[0] =6; // Packet length
298 2 if(txBuffer[1] == 0x02)
299 2 txBuffer[1] = 0x01; // Packet address
300 2 else if(txBuffer[1] == 0x01)
301 2 txBuffer[1] = 0x02; // Packet address
302 2 txBuffer[3] = send_num; //写入当前发送数据个数
C51 COMPILER V7.06 F34X_UART0_INTERRUPT 02/03/2009 16:53:57 PAGE 6
303 2 RFSendPacket(txBuffer, 7); // 发送数据
304 2 /* if (UART_Buffer_Size < UART_BUFFERSIZE)
305 2 {
306 2 UART_Buffer[UART_Input_First] = Byte; // Store in array
307 2
308 2 UART_Buffer_Size++; // Update array's size
309 2
310 2 UART_Input_First++; // Update counter
311 2 }*/
312 2
313 2 }
314 1
315 1 if (TI0 == 1) // Check if transmit flag is set
316 1 {
317 2 TI0 = 0; // Clear interrupt flag
318 2
319 2 /* if (UART_Buffer_Size != 1) // If buffer not empty
320 2 {
321 2 // If a new word is being output
322 2 if ( UART_Buffer_Size == UART_Input_First ) {
323 2 UART_Output_First = 0; }
324 2
325 2 // Store a character in the variable byte
326 2 Byte = UART_Buffer[UART_Output_First];
327 2
328 2 if ((Byte >= 0x61) && (Byte <= 0x7A)) { // If upper case letter
329 2 Byte -= 32; }
330 2
331 2 SBUF0 = Byte; // Transmit to Hyperterminal
332 2
333 2 UART_Output_First++; // Update counter
334 2
335 2 UART_Buffer_Size--; // Decrease array size
336 2
337 2 }
338 2 else
339 2 {
340 2 UART_Buffer_Size = 0; // Set the array size to 0
341 2 TX_Ready = 1; // Indicate transmission complete
342 2 }*/
343 2 }
344 1 }
345
346 //-----------------------------------------------------------------------------
347 // End Of File
348 //-----------------------------------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 239 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 46 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -