📄 i2c_master.lst
字号:
297 iicSend(I2C_ADDR, 0, 1); // I2C read
298 txStr("\r\nInterrupt Event:");
299 for(x = 1; x < RX_DATA[0]; x++)
300 {
301 txStr(" ");
302 txByte(RX_DATA[x]);
303 }
304
305 if( RX_DATA[2] & EVENT_STATE_CHG )
306 {
307 txStr("\r\nInt - Get Input Pin State");
308 getInputState();
309 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
310 iicSend(I2C_ADDR, 0, 1); // I2C read
311 txStr("\r\nPin State:");
312 for(x = 1; x < RX_DATA[0]; x++)
313 {
314 txStr(" ");
315 txByte(RX_DATA[x]);
316 }
317 }
318
319 if( RX_DATA[2] & EVENT_IR_DATA )
320 {
321 txStr("\r\nInt - Get IR Data");
322 getIRData();
323 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
324 iicSend(I2C_ADDR, 0, 1); // I2C read
325 txStr("\r\nIR Data:");
326 for(x = 1; x < RX_DATA[0]; x++)
327 {
328 txStr(" ");
329 txByte(RX_DATA[x]);
330 }
331 }
332 }
333 }
334 }
335
336
337 //
338 // USART0 I2C Interrupt Service Routine
339 //
340 #pragma vector=USART0TX_VECTOR
341 __interrupt void I2C_IV (void)
342 {
343 switch( I2CIV )
344 {
345 case 0x02: break; // ALIFG: n/a
346 case 0x04: // NACKIFG: n/a
347 break;
348 case 0x06: break; // OAIFG: n/a
349 case 0x08: break; // ARDYIFG: n/a
350 case 0x0A:
351 RX_DATA[rxIdx++] = I2CDRB;
352
353 if( rxIdx == 1 ) // RXRDYIFG
354 {
355 rxMsgLen = RX_DATA[0]-1; // Save message length
356 }
357
358 if( --rxMsgLen == 0 )
359 {
360 I2CTCTL |= I2CSTP;
361 }
362
363 break;
364 case 0x0C: // TXRDYIFG
365 I2CDRB = TX_DATA[txIdx++];
366 break;
367 case 0x0E: break; // GCIFG: n/a
368 case 0x10: break; // STTIFG: n/a
369 }
370 }
371
372
373 //
374 // PORT 1 Interrupt Service Routine
375 //
376 #pragma vector=PORT1_VECTOR
377 __interrupt void port1_ISR (void)
378 {
379 // P1.4
380 if( P1IFG & 0x10 )
381 {
382 P1IE &= ~0x10; // Disable interrupt
383 P1IFG &= ~0x10; // Clear interrupt flag
384 debounceCnt[0] = DEBOUNCE_CNT;
385 IE1 |= WDTIE; // Enable WDT interrupt
386 }
387
388 // P1.5
389 if( P1IFG & 0x20 )
390 {
391 P1IE &= ~0x20; // Disable interrupt
392 P1IFG &= ~0x20; // Clear interrupt flag
393 debounceCnt[1] = DEBOUNCE_CNT;
394 IE1 |= WDTIE; // Enable WDT interrupt
395 }
396 }
397
398
399 //
400 // PORT 2 Interrupt Service Routine
401 //
402 #pragma vector=PORT2_VECTOR
403 __interrupt void port2_ISR (void)
404 {
405 // P2.0
406 if( P2IFG & 0x01 )
407 {
408 P2IE &= ~0x01; // Disable interrupt
409 P2IFG &= ~0x01; // Clear interrupt flag
410 Event |= EVENT_INT; // Set event flag
411 LPM0_EXIT; // Exit LPM0
412 }
413 }
414
415
416
417 //
418 // Watchdog Timer (WDT) Interrupt Service Routine
419 //
420 #pragma vector=WDT_VECTOR
421 __interrupt void wdt_ISR(void)
422 {
423 unsigned char contFlag = 0;
424
425 if( debounceCnt[0] > 0 )
426 {
427 if( --debounceCnt[0] == 0 )
428 {
429 P1IFG &= ~0x10; // Clear interrupt flag
430 P1IE |= 0x10; // Enable interrupt
431 Event |= EVENT_SW1; // Set event flag
432 LPM0_EXIT; // Exit LPM0
433 }
434 else
435 {
436 contFlag = 1; // Set continue WDT flag
437 }
438 }
439
440 if( debounceCnt[1] > 0 )
441 {
442 if( --debounceCnt[1] == 0 )
443 {
444 P1IFG &= ~0x20; // Clear interrupt flag
445 P1IE |= 0x20; // Enable interrupt
446 Event |= EVENT_SW2; // Set event flag
447 LPM0_EXIT; // Exit LPM0
448 }
449 else
450 {
451 contFlag = 1; // Set continue WDT flag
452 }
453 }
454
455 if( !contFlag )
456 {
457 IE1 &= ~WDTIE; // Disable WDT interrupt
458 }
459 }
460
461
462 //
463 // SW1 Options
464 //
465 void sw1Options(void)
466 {
467 unsigned char option;
468
469 option = (P4IN >> 4); // Read value on pins P4.7,6,5,4
470
471 switch( option )
472 {
473 case 0x00:
474 break;
475 case 0x01:
476 break;
477 case 0x02:
478 break;
479 case 0x03:
480 break;
481 case 0x04:
482 break;
483 case 0x05:
484 break;
485 case 0x06:
486 break;
487 case 0x07:
488 break;
489 case 0x08:
490 break;
491 case 0x09:
492 break;
493 case 0x0A:
494 break;
495 case 0x0B:
496 break;
497 case 0x0C:
498 break;
499 case 0x0D:
500 break;
501 case 0x0E:
502 break;
503 case 0x0F:
504 break;
505 };
506 }
507
508
509 //
510 // SW2 Options
511 //
512 void sw2Options(void)
513 {
514 unsigned char x;
515 unsigned char option;
516
517 option = (P4IN >> 4); // Read value on pins P4.7,6,5,4
518
519 switch( option )
520 {
521 case 0x00: // Get RTC params
522 txStr("\r\nGet RTC Parameters");
523 getRTC();
524 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
525 iicSend(I2C_ADDR, 0, 1); // I2C read
526 txStr("\r\nRTC Parameters:");
527 for(x = 1; x < RX_DATA[0]; x++)
528 {
529 txStr(" ");
530 txByte(RX_DATA[x]);
531 }
532 break;
533 case 0x01:
534 txStr("\r\nSet RTC Parameters");
535 setRTC();
536 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
537 txStr("...done.");
538 break;
539 case 0x02:
540 txStr("\r\nGet IR Data");
541 getIRData();
542 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
543 iicSend(I2C_ADDR, 0, 1); // I2C read
544 txStr("\r\nIR Data:");
545 for(x = 1; x < RX_DATA[0]; x++)
546 {
547 txStr(" ");
548 txByte(RX_DATA[x]);
549 }
550 break;
551 case 0x03:
552 txStr("\r\nGet Last IR Value");
553 getIRVal();
554 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
555 iicSend(I2C_ADDR, 0, 1); // I2C read
556 txStr("\r\nIR Data:");
557 for(x = 1; x < RX_DATA[0]; x++)
558 {
559 txStr(" ");
560 txByte(RX_DATA[x]);
561 }
562 break;
563 case 0x04:
564 txStr("\r\nGet Port Pin State");
565 getInputState();
566 iicSend(I2C_ADDR, TX_DATA[0], 0); // I2C write
567 iicSend(I2C_ADDR, 0, 1); // I2C read
568 txStr("\r\nPort Pin:");
569 for(x = 1; x < RX_DATA[0]; x++)
570 {
571 txStr(" ");
572 txByte(RX_DATA[x]);
573 }
574 break;
575 case 0x05:
576 break;
577 case 0x06:
578 break;
579 case 0x07:
580 break;
581 case 0x08:
582 break;
583 case 0x09:
584 break;
585 case 0x0A:
586 break;
587 case 0x0B:
588 break;
589 case 0x0C:
590 break;
591 case 0x0D:
592 break;
593 case 0x0E:
594 break;
595 case 0x0F:
596 break;
597 };
598 }
599
600
601 //
602 // UART1 RX Interrupt Service Routine
603 //
604 #pragma vector=UART1RX_VECTOR
605 __interrupt void usart1_Rx_ISR(void)
606 {
607 while( !(IFG2 & UTXIFG1) ){} // Is USART1 TX buffer ready?
608 TXBUF1 = RXBUF1 + 1; // Increment RXBUF1, copy to TXBUF1
609 }
610
611
612 //
613 // UART Function - transmit null-terminated string
614 //
615 void txStr(const char* pStr)
616 {
617 unsigned int cnt = 0;
618
619 for(; *pStr; ++pStr)
620 {
621 while (!(IFG2 & UTXIFG1)) // USART1 TX buffer ready?
622 {
623 if( ++cnt == UART_TX_RETRY )
624 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -