Пример #1
0
__interrupt void USCI0RX_ISR(void)
{

	TACCTL0 &= ~CCIE;//Stop Timmer
#ifdef SAVE
	if((IFG2&UCB0RXIFG) == UCB0RXIFG)
	{

	//SPI_RxISR_Hook();
		*SPI_Rx_Buffer = UCB0RXBUF;								//  读取接收缓存,同时,用于清除“UCA0RXIFG”中断标志位
		if(SPI_Rx_Size!=0)
		{
			SPI_Rx_Size-- ;														// 待发送的数据减1
			SPI_Rx_Buffer++;												// 接收指针向下一字节偏移
			UCB0TXBUF = 0xFF;												// 纯粹为了提供CLK。UCA0TXIFG标志位同时被清除。
		}
	    IFG2 &= ~UCB0TXIFG; //!
	 if(SPI_Rx_Size==0)
	//	 flagRx = 0;
		 _bic_SR_register_on_exit(LPM0_bits);
	}
	#endif
	if((IFG2&UCA0RXIFG) == UCA0RXIFG)
	{
	IFG2 &= ~UCA0RXIFG;     // 手动清除标志位
	UART_OnRx();					// 调用Rx事件处理函数

	}

	if (isInTimmer == 0) TACCTL0 |= CCIE;//Enable Timmer

	
}
Пример #2
0
__interrupt void USI_TXRX(void)
{
  switch(__even_in_range(i2c_state,12)) {
  case I2C_IDLE:
    break;

  case I2C_START:               // generate start condition
    USISRL = 0x00;
    USICTL0 |= (USIGE|USIOE);
    USICTL0 &= ~USIGE;
    i2c_prepare_data_xmit_recv();
    break;

  case I2C_PREPARE_ACKNACK:      // prepare to receive ACK/NACK
    USICTL0 &= ~USIOE;           // SDA = input
    USICNT |= 0x01;              // Bit counter=1, receive (N)Ack bit
    i2c_state = I2C_HANDLE_RXTX; // Go to next state: check ACK/NACK and continue xmitting/receiving if necessary
    break;

  case I2C_HANDLE_RXTX:         // Process Address Ack/Nack & handle data TX
    if((USISRL & BIT0) != 0) {  // did we get a NACK?
      i2c_prepare_stop();
    } else {
      i2c_prepare_data_xmit_recv();
    }
    break;

  case I2C_RECEIVED_DATA:       // received data, send ACK/NACK
    *i2c_receive_buffer = USISRL;
    i2c_receive_buffer++;
    USICTL0 |= USIOE;           // SDA = output
    if(i2c_sequence_length > 0) {
      // If this is not the last byte
      USISRL = 0x00;                // ACK
      i2c_state = I2C_HANDLE_RXTX;  // Go to next state: data/rcv again
    } else {                        // last byte: send NACK
      USISRL = 0xff;                // NACK
      i2c_state = I2C_PREPARE_STOP; // stop condition is next
    }
    USICNT |= 0x01;             // Bit counter = 1, send ACK/NACK bit
    break;

  case I2C_PREPARE_STOP:        // prepare stop condition
    i2c_prepare_stop();         // prepare stop, go to state 14 next
    break;

  case I2C_STOP:                // Generate Stop Condition
    USISRL = 0x0FF;             // USISRL = 1 to release SDA
    USICTL0 |= USIGE;           // Transparent latch enabled
    USICTL0 &= ~(USIGE|USIOE);  // Latch/SDA output disabled
    i2c_state = I2C_IDLE;       // Reset state machine for next xmt
    if(i2c_wakeup_sr_bits) {
      _bic_SR_register_on_exit(i2c_wakeup_sr_bits); // exit active if prompted to
    }
    break;
  }
  USICTL1 &= ~USIIFG;           // Clear pending flag
}
Пример #3
0
__interrupt void USCI_A0_ISR(void)
{
  switch(__even_in_range(UCA0IV,4))
  {
    case 0:   break;                             // Vector 0 - no interrupt
    case 2:                                      // Vector 2 - RXIFG
    	      SPI_RxISR();
    	      if(SPI_Rx_Size == 0)
    	      _bic_SR_register_on_exit(LPM0_bits);
              break;
    case 4:
              SPI_TxISR();
              if(SPI_Tx_Size == 0)
              _bic_SR_register_on_exit(LPM0_bits);
    	      break;                             // Vector 4 - TXIFG
    default:  break;
  }
}
__interrupt void handleTimerA(void)
{
	timeMSec++;											// count milliseconds

	if(timeMSec == 1000)								// if we reached 1 second
	{
		timeMSec = 0;									// reset milliseconds
		timeSecond++;									// increase seconds
		if(timeSecond == 60)							// if we reached 1 minute
		{
			timeSecond = 0;								// reset seconds
			timeMinute++;								// increase minutes
			if(timeMinute == 60)						// if we reached 1 hour
			{
				timeMinute = 0;							// reset minutes
			}
		}

		VCOM ^= MLCD_VCOM;								// invert polarity bit every second

		_bic_SR_register_on_exit(LPM0_bits);			// wake up main loop every second
	}
}
Пример #5
0
__interrupt void USCI0TX_ISR(void)
{
	//TACCTL0 &= ~CCIE;//Stop Timmer
#ifdef SAVE
	if((IFG2&UCB0TXIFG) == UCB0TXIFG)
	{
	//IFG2 &= ~UCB0TXIFG;
	//	SPI_TxISR_Hook();
	    UCB0RXBUF;                                            				// Tx和Rx中断标志位都会置位。此处对UCA0RXBUF空操作,用于清除“UCA0RXIFG”中断标志位
		if(SPI_Tx_Size!=0)
		{
			SPI_Tx_Size-- ;														// 待发送的数据减1
			SPI_Tx_Buffer++;											// 发送指针向下一字节偏移
			UCB0TXBUF = *SPI_Tx_Buffer;							// 放入发送缓存,同时,用于清除“UCA0TXIFG”中断标志位
		}
		else
			IFG2 &= ~UCB0TXIFG;
		if(SPI_Tx_Size==0)
		_bic_SR_register_on_exit(LPM0_bits);
	//IFG2 &= ~UCB0TXIFG;
	}
#endif
	if((IFG2&UCA0TXIFG) == UCA0TXIFG)
	{

	IFG2 &= ~UCA0TXIFG;
	UART_OnTx();					// 调用Tx事件处理函数
	//IFG2 &= ~UCA0TXIFG;   // 手动清除标志位

	}


	//TACCTL0 |= CCIE;//Enable Timmer
	//if (isInTimmer == 0) TACCTL0 |= CCIE;
	
}
Пример #6
0
__interrupt void ADC10_ISR_HOOK(void)
{
	_bic_SR_register_on_exit(LPM4_bits);
}