⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uscia1_spi.c

📁 MSP430z_f247.rar
💻 C
字号:
# include "USCIA1_SPI.h"

void USCIA1_SPI_Device_INIT(void)
{
	SPI_Master_PORT_INIT();
	SPI_Master_INIT();
}

void SPI_Master_PORT_INIT(void)
{					
  	UCA1_SPI_MOSI;								//使用的是USCIA1,则复用端口为	
	UCA1_SPI_SCK;								//P3.6及P5.0(UAC1CLK)
	UCAI_SPI_OUT;								//SCK和MOSI通为输出
	
	SS_DIR_OUT;      							//SS
	SS_HIGH;									//SS平时为高,只在发送数据期间
												//为低
	
	CS_DIR_OUT;									//CS选通端口
	CS_ALL_HIGH;
}

void SPI_Master_INIT(void)
{
	UCA1CTL1 |= UCSWRST;
	//UCCKPH 
  	UCA1CTL0 |= UCCKPL| UCMSB| UCMST| UCSYNC; 	//3-pin, 8-bit SPI master
  	UCA1CTL1 |= UCSSEL_2;                     	//SMCLK
  	UCA1BR0 |= 0x02;							//发送位速率选择,这里为SMCLK/2
  	UCA1BR1 = 0;
  	UCA1MCTL = 0;								//该寄存器在SPI中应该被清除
	
  	UCA1CTL1 &= ~UCSWRST;                     	//USCI复位取消,可以进行相关操作
	UC1IE |= UCA1TXIE;							//使能发送中断
	
	//UCA1TXBUF = 0xf0; 						//启动SPI
}

void Update_SPI_Buffer(unsigned char* p_Data_Array, 
					   unsigned char Data_SUM)
{
	unsigned char i=0;
	for(i=0; i<Data_SUM; i++)
	{
		SPI_Buffer[i]=p_Data_Array[i];
	}
	
	SS_LOW;									//SS下降沿
	
	UCA1TXBUF = SPI_Buffer[0];
}

void Set_DAC_Data(unsigned int DAC_Data, unsigned char Target_NUM)
{
	unsigned char Data_Array[2]={0};
	
  	DAC_Data |= BITE;
	DAC_Data &= ~BITD;
	
	Data_Array[0] = DAC_Data>>8;
	Data_Array[1] = DAC_Data;
	
	CS_ALL_HIGH;					//所有选通信号被禁止
	
	switch(Target_NUM)				//选通对应的ADC芯片
	{
		case 1:
		  	CS0_LOW;
			break;
		case 2:
			CS1_LOW;
			break;
		case 3:
			CS2_LOW;
			break;
	}
	
	Is_SPI_OK=0;					//复位发送完毕标志
	
	Update_SPI_Buffer(Data_Array, 2);
	
	while(!Is_SPI_OK)				//等待发送完毕
	  	;
}

//发送中断向量有USCIAB0TX_VECTOR USCIAB1TX_VECTOR
//接受中断向量有USCIAB0RX_VECTOR USCIAB1RX_VECTOR
//A0和B0,A1和B1是公用中断向量的

//发送中断处理程序
#pragma vector=USCIAB1TX_VECTOR
__interrupt void USCIA1TX_ISR(void)
{  
  	//while (!(UC1IFG & UCA1TXIFG));			//这个语句只在查询时使用
  	switch(SPI_NUM_New)
	{
		case 1:
		{
			UCA1TXBUF = SPI_Buffer[1];			//SPI_Buffer[1]为16位中的低8位
			SPI_NUM_New++;						
			break;
		}
		case 2:
		{
		  	SS_HIGH;							//16位数据发送完毕,SS上升沿
		  	SPI_NUM_New = 1;
			UC1IFG &= ~UCA1TXIFG;				//软件清除中断标志,否则中断程序	
												//将一直被执行
			Is_SPI_OK=1;						//发送完毕标志置位
			break;								
		}
	}	
}												

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -