工具/软件:Code Composer Studio
我需要带MSP430的ADS8332示例代码....plz plz帮助我....... 过去一周我尝试了,但我找不到解决方案,所以… 请帮我
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
我需要带MSP430的ADS8332示例代码....plz plz帮助我....... 过去一周我尝试了,但我找不到解决方案,所以… 请帮我
您好,Ryan:
我写了代码并浪费了3天,但无法读取CFR寄存器.......... 这是代码......
SPI初始化中是否有任何问题..........................
我 使用了24MHZ晶体....
如果您有示例代码,请发送我................
在EMAIL-hitesh.mathukiya@gmail.com中
#include<MSP430-h>
#include"sps_ppm.h"(包括"sps_ppm.h")
#include"sps_clock.h"
#include"sps_gPI.h"
//------------------ Hitesh------------------
#定义 无操作 0x00
#定义 conv_high P3OUT |= BIT6
#定义 conv_low P3OUT &=~ BIT6
#定义 RESET_HIGH P3OUT |= BIT5
#定义 RESET_LOW P3OUT &=~ BIT5
#定义 CS_LOW P4OUT &=~ BIT0
#定义 Cs_high P4OUT |= BIT0
#定义 SCLK BIIT2 //UCA0CLK
#定义 SDI BIT0 //UCA0SIMO
#定义 SDO BIT1. //UCA0SOMI
/*WRITE CFR=1110=E
选择analog channel=0111=7
阅读CFR=1100=C
*/
unsigned char select_manual_channel[4]={0xE2,0XFD};//make D11=0 for manual CHANNNEL//internal reference=FFFc 4.096 ,范围为:选择Vref*FFC=5.12V ,因此在5.12V时提供1.25 ,在0V时提供0000
unsigned char select_Auto_channel[4]={0xE2,0XFD};//make D11=1 for Auto channel
无符号字符 write_CFR[4]={0xE0XAA,0X00,0X00);//使用手动通道写入CFR
unsigned char select_analog_channel[4]={0x72,0XFD};//选择模拟通道
unsigned char read_CFR[8]={0xC0,0X00,0X00,0X00};//读取CFR
unsigned char channel_0[4]={0X02,0XFD};//选择CHANNEL0
unsigned char channel_1[4]={0X12,0XFD};//选择Channel1
unsigned char channel_2[4]={0X220XFD};//选择CHANNEL2
unsigned char channel_3[4]={0X32,0XFD};//选择CHANNEL3
unsigned char channel_4[4]={0X42,0XFD};//选择CHANNEL4.
unsigned char channel_5[4]={0X52,0XFD};//选择CHANNEL5
unsigned char channel_6[4]={0X62,0XFD};//选择CHANNEL6.
unsigned char channel_7[4]={0X72,0XFD};//选择CHANNEL7
unsigned char rec;
unsigned char response_buffer1[300];
unsigned char j=0,xoo,data_comin=0,jj=0;
unsigned int iii=0;
unsigned char byte[5],pin_init=1;
无符号char标志=0;
unsigned char nop_flag=0;
unsigned int next数据[11];
浮点con_data;
long next数据1;
长avg_data=0;
unsigned int adc_data1,final_data=0;
unsigned char data_hitesh[5];
无符号int计数,n;
unsigned char all_channel=1;
unsigned char send_all_data=0,data_is_receive =0,send_one_data=0,no_send_data=0,channel=0,select_mix_4067=0,select_mix_4067_flag=0,switch_all_channel=1;
无符号字符enigma=0;
unsigned int Get_Get=0;
unsigned char response_buffer2[50];
unsigned int next _inc = 0;
void reset();
void round-off-the_bit();
void nop();
void write_range_sel_REG_Register1();
void transfer_frame(unsigned char frame_data);
void spi_init();
void con_all_channel();
void Get_data (无符号int hh);
void pheonix_execute_default_ip_sequence();
//---------------- Hitesh------------------
//________________________________________________________________ 时钟相关功能
void pheonix_set_pMM_lever_of_24_MHz();
void pheonix_initialize_the_clock();
//________________________________________________________________ 时钟相关变量
bool bReturn = status_fail;
内部主(无效)
{
WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
pheonix_initalize_all_gpio_ports();
pheonix_set_PMM_levate_of_24_MHz();
pheonix_initialize_the_clock();
//----------- SPI-------------------------------------------------------------------------------------
SPI_init();
reset();
write_range_sel_REG_Register1();
//----------- Hitesh------------------
__bis_sr_register (GIE);
同时(1)
{
对于(i=0;i<=3;i++){
transfer_frame (write_CFR[I]);
}
对于(i=0;i<=1;i++){
transfer_frame (read_CFR[I]);
}
}
}
void reset()
// reset_high;
低;
RESET_LOW;
__DELAY周期(1万);
//reset_low;
RESET_HIGH;
__DELAY周期(2万);
// reset_high;
高;
}
//________________________________________________________________ 时钟________________________________________________________________
void pheonix_set_pMM_lever_of_24_MHz()
{
pheonix_set_v_core_to_lever(PMM_core_lever_1);
__DELAY周期(10万);
pheonix_set_v_core_to_lever( PMM_core_lever_2);
__DELAY周期(10万);
pheonix_set_v_core_to_lever( PMM_core_lever_3);
__DELAY周期(10万);
}
void pheonix_initialize_the_clock()
{
UCS_setExternalClockSource (3.2768万,24000000);// XT1CLK输入,// XT2CLK输入
UCS_TurnOffXT1();
bReturn = STATUS_FAIL;
做
{
bReturn = UCS_turnOnXT2WithTimeout (UCS_XT2_DRIVE_24MHZ_32MHz,5万);
__DELAY周期(5万);
}
同时(!bReturn);
如果(bReturn == status_fail)
{
同时(1);
}
UCS_initClockSignal (UCS_ACLK,UCS_REFOCLK_SELECT,UCS_CLock_diver_1);
UCS_initClockSignal (UCS_MCLK,UCS_XT2CLK_SELECT,UCS_CLock_diver_1);
UCS_initClockSignal (UCS_SMCLK,UCS_XT2CLK_SELECT,UCS_CLock_diver_1);
}
//________________________________ Hitesh________________________________________________________
//------------------
void spi_init(){
UCB0CTL1 |= UCSWRST; //**将状态机置于复位**
UCB0CTL0 |= UCMST+UCSYNC+UCMODE_1+UCMSB+UCCKPL; // 3引脚,8位SPI主控 UCCKPL+
UCB0CTL0 &=~(UC7BIT+UCPEN+UCCKPH); //gettinng设备ID正确
//时钟极性高,MSB
UCB0CTL1 || UCSSEL_1; // SMCLK
UCB0BR0 = 0x02; ///2
UCB0BR1 = 0; //
UCB0CTL1 &=~UCSWRST; //**初始化USCI状态机**
//UCA0IE |= UCRXIE; //启用USI_A0 RX中断
}
void nop()
{
NOP_FLAG=1;
int i=0;
// CS_LOW;
对于(i=0;i<=3;i++){
transfer_frame (NOP);
}
// CS_HIGH;
NOP_FLAG=0;
//RESET_HIGH;
// reset_low;
}
void write_range_sel_REG_Register1()
{
int i=0;
// reset_high;
// reset_low;
// _延迟周期(1万);
// reset_high;
// CS_HIGH;
对于(i=0;i<=8;i++){
transfer_frame (read_CFR[I]);
}
//nop();
i=0;
// CS_LOW;
低;
对于(i=0;i<=3;i++){
transfer_frame (write_CFR[I]);
}
i=0;
高;
低;
对于(i=0;i<=4;i++){
transfer_frame (read_CFR[I]);
}
//nop();
i=0;
高;
低;
对于(i=0;i<=3;i++){
transfer_frame (select_manual_channel[i]);
}
i=0;
高;
低;
对于(i=0;i<=3;i++){
transfer_frame (write_CFR[I]);
}
i=0;
高;
低;
对于(i=0;i<=3;i++){
transfer_frame (select_analog_channel[i]);
}
i=0;
高;
低;
对于(i=0;i<=3;i++){
transfer_frame (read_CFR[I]);
}
i=0;
NOP ();
高;
低;
对于(i=0;i<=3;i++){
transfer_frame (channel_3[i]);
}
i=0;
高;
}
void transfer_frame(unsigned char frame_data){
while (!(UCB0IFG和UCTXIFG));
UCB0TXBUF=frame_data;//WFP 3.3
while (!(UCB0IFG和UCRXIFG));
REC=UCB0RXBUF;
//byte[iii]= UCB0RXBUF; // WFP 3.4
III++;
如果(iii>1){
III=0;
next数据[j]=(int)((byte[1]<0)& 0xFF)+(byte[0]<8)& 0xff);
AVG_DATA=NEXT_DATA[j]+AVG_DATA;
J++;
如果(j>5){
final_data=avg_data/6; ///用6个数据求平均值
J=0;
AVG_DATA=0;
COUNT++;
Enigma=1;
}
next _data1=((((Long) final_data)*4300); //REFERANCE 6.144 VOLT (4.3 数据=REFERANCE 4.3 电压)
con_data=(float)((next数据1)/0xffff); //devide by=FFFC
adc_data1=con_data;
//data[3]=((ADC_data1 % 10))+0x30;
DATA_Hitesh[0]=(ADC_DATa1/1万)+0x30; //将小数转换为ASCI 5 ASCI值0x35
DATA_Hitesh[1]=((ADC_DATa1 % 1万)/1000)+0x30; //将十进制数转换为ASCI 5十六进制值0x35
DATA_Hitesh[2]=((ADC_data1 % 1000)/ 100)+0x30;
DATA_Hitesh[3]=((ADC_data1 % 100)/ 10)+0x30;
DATA_Hitesh[4]=((ADC_data1 % 10))+0x30;
}
}
void Get_data (无符号int hh)
{
/*unsigned char Lexi_1,Lexi_2;
Lexi_1=(all_channel/10)+0x30;
Lexi_2=(all_channel%10)+0x30;*/
response_buffer1[hh]=data_hitesh[0];
Response_buffer1[h+1]=data_hitesh[1];
response_buffer1[h+2]='.';
//Response_buffer1[h+2]=;
Response_buffer1[h+3]=data_hitesh[2];
Response_buffer1[h+4]=data_hitesh[3];
Response_buffer1[h+5]=',';
}