Other Parts Discussed in Thread: MSP430F149, MSP430F249
Hi guys I need help for so spi communicating,
I have ms5607 ,it's communicating spi or i2c, I use spi but I can't do this. I have one example code for msp430f149 , I change a lot of word for 249ep but its can't communicating..
This is example code
#include<MSP430x14x.h> #include <stdio.h> #include <string.h> #include <math.h> #define TRUE 1 #define FALSE 0 typedef unsigned char uchar; typedef unsigned int uint; #define CMD_RESET 0x1E // ADC reset command #define CMD_ADC_READ 0x00 // ADC read command #define CMD_ADC_CONV 0x40 // ADC conversion command #define CMD_ADC_D1 0x00 // ADC D1 conversion #define CMD_ADC_D2 0x10 // ADC D2 conversion #define CMD_ADC_256 0x00 // ADC OSR=256 #define CMD_ADC_512 0x02 // ADC OSR=512 #define CMD_ADC_1024 0x04 // ADC OSR=1024 #define CMD_ADC_2048 0x06 // ADC OSR=2056 #define CMD_ADC_4096 0x08 // ADC OSR=4096 #define CMD_PROM_RD 0xA0 // Prom read command #define csb_lo() {P4DIR=BIT5;P4OUT &=~BIT5;} #define csb_hi() {P4DIR=BIT5;P4OUT |= BIT5;} void spi_send(uchar cmd); void cmd_reset(void); unsigned long cmd_adc(uchar cmd); unsigned int cmd_prom(uint coef_num); void Initsys(void); void SPIInit(void); void Init(void); void Putstring(uchar *ptr); int i_putc(char ch); void i_puts(char *str); void i_printf(double ff); //��ʱ void tickdelay(uint tick) //delay(0)Ϊ10��ʱ������, { //����tickÿ����1����������һ����תָ���i=i+1, uint y=0; //������ָ�ռ6��ʱ������ for(y=0;y < tick;y=y+1); } void _delay_900us(void) { tickdelay(1195) ; tickdelay(0) ; } void _delay_3ms(void) { tickdelay(4000) ; } void _delay_10ms(void) { tickdelay(13335) ; } void spi_send(uchar cmd) { TXBUF1=cmd; while((UTCTL1 & 0x01)!= 0x01); } double D2,D1; double a,b,c,d,e,f,g,h; double T,m,n,l; double dT; uint x; double OFF,SENS,tt1; //long long OFF1,TCO,SENS1,TCS,P1,P2,P3; double P; double PP; //������ void main (void) { WDTCTL = WDTPW + WDTHOLD; //�ؿ��Ź� uchar *tishi1 = "temperature:"; uchar *tishi2 = "pressure:"; uchar *tishi3 = "\n"; Initsys(); cmd_reset(); a=cmd_prom(0); b=cmd_prom(1); c=cmd_prom(2); d=cmd_prom(3); e=cmd_prom(4); f=cmd_prom(5); g=cmd_prom(6); h=cmd_prom(7); while(TRUE) { SPIInit(); D1=cmd_adc(CMD_ADC_D1 + CMD_ADC_2048); D2=cmd_adc(CMD_ADC_D2 + CMD_ADC_2048); dT=f; m=g/10000.0; dT=D2-(dT*256); l=(dT*m); n=(l/8388608.0); T=2000+n*10000; T=T/100; /* //*************************** OFF1=c; OFF1=OFF1*131072; TCO=e; TCO=(long long)(TCO*dT/64); OFF=OFF1+TCO; //*************************** SENS1=b; SENS1=SENS1*65536; TCS=d; TCS=(long long)(TCS*dT/128); SENS=SENS1+TCS; //*************************** P1=(long long)(SENS/2097152); P2=(long long)(D1*P1/32768); P3=(long long)(OFF/32768); P=(signed long)(P2-P3); */ tt1=(e/1024)*(dT/2048); OFF=c*4+tt1; SENS=b*65536+d*(dT/128); P=(D1/32768)*(SENS/2097152); P=P-OFF; PP=P/100.0; //*************************** Init(); Putstring(tishi1); i_printf(T); //Putstring(tishi3); Putstring(tishi2); i_printf(PP); Putstring(tishi3); } } //ϵͳ��ʼ�� void Initsys(void) { unsigned int i; BCSCTL1 &= ~XT2OFF; //��XT2���� do { IFG1 &= ~OFIFG; //�������ʧЧ��־ for(i = 0xff; i > 0; i--); //��ʱ���ȴ�XT2�� } while ((IFG1 & OFIFG) != 0); //�ж�XT2�Ƿ����� BCSCTL2 |= SELM_2; //ѡ��MCLKΪXT2 SPIInit(); } //SPI��ʼ�� void SPIInit(void) { UCTL1 |= SWRST; //SWRST��λ��USART���� ME2 &= ~UTXE1; ME2 &= ~URXE1; UTCTL1 &= ~SSEL0; P3SEL = 0x00; UCTL1 |= CHAR + SYNC + MM; //SPI��ģʽ��8Ϊ���� UTCTL1 |= STC + SSEL0 ; //ѡ��ACLK(32KHZ����Ϊʱ��Դ��3��SPIģʽ (CKPH,CKPL)=10 UTCTL1 |=CKPL; U1BR0=0X02; U1BR1=0X00; //�����ʷ�Ƶ����Ϊ2 UMCTL1 = 0x00; //SPIģʽ�±������� ME2 |= USPIE1; //SPI0ģ������ P5SEL = 0x0E; //P5.1~P5.3Ϊģ�鹦�� UCTL1 &= ~SWRST; //P5DIR |= 0x0A; //P5.1(SIMO)��P5.3(UCLK)��Ϊ���ģʽ��P5.2(SOMI)Ϊ����ģʽ//P5.0~P5.3Ϊģ�鹦��,P5.1(SIMO)��P5.3(UCLK1)��P5.4��DACS1����Ϊ���ģʽ P4DIR |= BIT5; P4OUT |= BIT5; //CS=1,��ѡ��AD } //ϵͳ��ʼ�� void Init(void) { U1CTL|=SWRST;//��λ���� ME2 &= ~USPIE1; U1CTL&=~SYNC; //ѡ��UARTģʽ U1CTL&=~MM; UTCTL1 &=~CKPL; UTCTL1 &= ~SSEL0; UTCTL1 &= ~STC; P5SEL = 0x00; P3SEL |= 0xc0; //P3.6��P3.7�ֱ�����ΪUSART1�ķ��ͺͽ��� ME2 |= UTXE1 + URXE1; //ʹ��USART1 TXD/RXD UCTL1 |= CHAR; //8Ϊ����λ UTCTL1 |= SSEL0; //UCLK=ACLK //���ò�����Ϊ2400 UBR01 = 0x0D; //�������� UBR11 = 0x00; UMCTL1 = 0x6B; //С�����ֵ��� UCTL1 &= ~SWRST; //��ʼ��USART1״̬ //IE2 |= URXIE1; //ʹ��USART1 RX�ж� } //******************************************************** //! @brief send reset sequence //! //! @return 0 //******************************************************** void cmd_reset(void) { P4OUT &= ~BIT5; tickdelay(1000); spi_send(CMD_RESET); _delay_3ms(); //_delay_3ms(); P4OUT |= BIT5; //tickdelay(1000); } //******************************************************** //! @brief preform adc conversion //! //! @return 24bit result //******************************************************** unsigned long cmd_adc(uchar cmd) { unsigned int ret; unsigned long temp=0; P4OUT &= ~BIT5; tickdelay(1000); spi_send(CMD_ADC_CONV+cmd); tickdelay(14000); P4OUT |= BIT5; tickdelay(1000); P4OUT &= ~BIT5; tickdelay(1000); spi_send(CMD_ADC_READ); tickdelay(1000); spi_send(0x00); tickdelay(100); ret=RXBUF1; tickdelay(1000); temp=65536*ret; spi_send(0x00); tickdelay(100); ret=RXBUF1; tickdelay(1000); temp=temp+256*ret; spi_send(0x00); tickdelay(100); ret=RXBUF1; tickdelay(1000); temp=temp+ret; P4OUT |= BIT5; //tickdelay(1000); return temp; } //******************************************************** //! @brief Read calibration coefficients //! //! @return coefficient //******************************************************** unsigned int cmd_prom(uint coef_num) { unsigned int ret; unsigned int rC=0; P4OUT &= ~BIT5; tickdelay(100); spi_send(CMD_PROM_RD+coef_num*2); tickdelay(100); spi_send(0x00); tickdelay(100); ret=RXBUF1; tickdelay(100); rC=256*ret; spi_send(0x00); tickdelay(100); ret=RXBUF1; tickdelay(100); rC=rC+ret; P4OUT |= BIT5; //tickdelay(1000); return rC; } /*********************************** �������ƣ�putsrting �� ��:��PC�������ַ� �� ������ ����ֵ ���� ************************************/ void Putstring(uchar *ptr) { while(*ptr !='\0') { while(!(IFG2 & UTXIFG1)); TXBUF1 = *ptr++; } } /*�ַ����ͺ���*/ int i_putc(char ch) { TXBUF1 = ch; while(!(IFG2 & UTXIFG1)); return(1); } /* �ַ������ͺ��� */ void i_puts(char *str) { uchar i; uchar sz; sz = strlen(( char *)str); for(i=0; i < sz ; i++) { while(!i_putc(*(str + i))); } } void i_printf(double ff) { char str_temp[20]; sprintf(str_temp,"%lf",ff); i_puts(*(&str_temp)); }