Exemple #1
0
unsigned char SPI_TxFrame(unsigned char *pBuffer, unsigned int size)
{
    if(size ==0 )            return  (1);
    if(UCA0STAT & UCBUSY)    return  (0);
    _disable_interrupts();
    SPI_Rx_Or_Tx = 1;
    SPI_Tx_Buffer = pBuffer;
    SPI_Tx_Size = size - 1;
    SPI_Interrupt_Sel(SPI_Rx_Or_Tx);
    //__enable_interrupt();
    UCA0IFG &= ~(UCTXIFG + UCRXIFG);
    __bis_SR_register(GIE);
    UCA0TXBUF = *SPI_Tx_Buffer;

    _bis_SR_register(LPM0_bits);

//	unsigned int gie = _get_SR_register() & GIE;
//
//	while(size--)
//	{
//		while( !(IFG2 & UCA0TXIFG) );
//		UCA0TXBUF = *pBuffer++;
//	}
//	while(UCA0STAT & UCBUSY);
//	UCA0RXBUF;
//	_bis_SR_register(gie);
    return  (1);
}
Exemple #2
0
unsigned char SPI_RxFrame(unsigned char *pBuffer, unsigned int size)
{
    if(size ==0 )                        return  (1);
    if(UCA0STAT & UCBUSY)    return  (0);
    _disable_interrupts();
    SPI_Rx_Or_Tx = 0;
    SPI_Rx_Buffer = pBuffer;
    SPI_Rx_Size = size - 1;
    SPI_Interrupt_Sel(SPI_Rx_Or_Tx);
    _enable_interrupts();
    UCA0TXBUF = 0xff;             //在接收模式下,也先发送一次空字节,一遍提供时钟通信

    _bis_SR_register(LPM0_bits);

//	unsigned int gie = _get_SR_register() & GIE;
//	IFG2 &= ~UCA0RXIFG;
//
//	while(size--)
//	{
//		while( !(IFG2 & UCA0TXIFG) );
//		UCA0TXBUF = 0xff;
//		while( !(IFG2 & UCA0RXIFG) );
//		*pBuffer++ = UCA0RXBUF;
//	}
    return 1;
}
Exemple #3
0
/****************************************************************************
* 名    称:SPI_TxFrame()
* 功    能:3线硬件SPI模式下,发送指定数目的字节缓存
* 入口参数:pBuffer:指向待发送的数组地址
* 					size:待发送的字节数
* 出口参数:0:当前硬件SPI在忙,
* 					1:当前数据已发送完毕,
* 说    明:使用该函数可以发送指定个数的一帧数据
* 使用范例:SPI_TxFrame(CMD,6);	// 从CMD中取出并发送6个字节
****************************************************************************/
unsigned char SPI_TxFrame(unsigned char  *pBuffer, unsigned int  size)
{
	if(size==0)									return (1);
	if(UCB0STAT & UCBUSY)			return	(0);			// 判断硬件SPI正忙,返回0
    _disable_interrupts();											// 关闭总中断
    SPI_Rx_Or_Tx = 1;													// 开启发送模式
    SPI_Tx_Buffer = pBuffer;										// 将发送缓存指向待发送的数组地址
    SPI_Tx_Size = size-1;												// 待发送的数据个数
    SPI_Interrupt_Sel(SPI_Rx_Or_Tx);							// SPI中断开启选择
    _enable_interrupts();	                               				// 开总中断
    UCB0TXBUF = *SPI_Tx_Buffer;								// 先发送第一个字节人工触发第一次"发送"中断
	_bis_SR_register(LPM0_bits);									// 进入低功耗模式0
	//flagTx = 1;
	//while(flagTx);
    return (1);
}
Exemple #4
0
/****************************************************************************
* 名    称:SPI_RxFrame()
* 功    能:3线硬件SPI模式下,接收指定数目的字节
* 入口参数:pBuffer:指向存放接收数据的数组
* 					size:要接收的字节数
* 出口参数:0:当前硬件SPI在忙,
* 					1:当前数据已发送完毕,
* 说    明:使用该函数可以接收指定个数的一帧数据
* 使用范例:SPI_RxFrame(CMD,6);// 接收6个字节,并依次放入CMD中
****************************************************************************/
unsigned char SPI_RxFrame(unsigned char  *pBuffer, unsigned int size)
{
	if(size==0)									return (1);
	if(UCB0STAT & UCBUSY)			return	(0);			// 判断硬件SPI正忙,返回0
	 _disable_interrupts();											// 关闭总中断
    SPI_Rx_Or_Tx = 0;													// 开启接收模式
    SPI_Rx_Buffer = pBuffer;										// 将发送缓存指向待发送的数组地址
    SPI_Rx_Size = size-1;												// 待发送的数据个数
    SPI_Interrupt_Sel(SPI_Rx_Or_Tx);							// SPI中断开启选择
                                   				// 开总中断
    UCB0TXBUF = 0xFF;													// 在接收模式下,也要先发送一次空字节,以便提供通信时钟。
  	IFG2 |= UCB0RXIFG;
  	_enable_interrupts();
    //flagRx = 1;								// 进入低功耗模式0
	//while(flagRx);
	_bis_SR_register(LPM0_bits);
  	return (1);
}