|
利用2407控制马达,并带动电子指南针芯片,角度值从串口反馈
/* file name: spicom1.c */ /* SPI communication test */
#include<util.h> #include<SCI.h>
void bad_trap(void) { while(1); }
void main(void) { unsigned int i,j,test1,test2, ADRES1, ADRES2; char msg[50]; DSPInit(PLLx1); SCIInit(); SCISetBaud(9600); // 阿 器飘 汲沥 SET_PF_OUT(BIT5|BIT6); // FOR DEBUGGING SET(PORTF,BIT5); CLEAR(PORTF,BIT6); SET_PB_OUT(BIT4); // AD1 ENABLE SET(PORTB,BIT4); // EVA SETTING EVA_ENABLE; EVB_ENABLE; //SPI Module setting SPI_ENABLE; CLEAR(SPICCR, BIT4); // SPI SW RESET SET(MCRB, BIT5|BIT4|BIT3|BIT2); SPICTL = 0x06; // 0000 0110 : MASTER MODE , TALK SPIBRR = 0xF9; // 40kbps at 10Mhz ; BAUD = (CUPCLK/(SPIBRR+1)) SPICCR = 0x4F; // DATA LENGTH 16BIT; ad converter falling edge SET(SPICCR, BIT7); // SPI SW RESET SCIPrintf("SPI module test.\n"); i=0; j=0; ADRES1=0; ADRES2=0; while(1) { TOGGLE(PORTF,BIT5|BIT6); test1=0; test2=0; CLEAR(PORTB,BIT4); //AD1 ENABLE for(i=0; i<10; i++) j++; SPITXBUF = 0xF000; //MSB FIRST FORMAT ; CHANNEL 0 for(i=0; i<10; i++) j++; test1 = SPIRXBUF; for(i=0; i<200; i++) j++; SET(PORTB,BIT4); //AD1 DISABLE for(i=0; i<100; i++) j++; CLEAR(PORTB,BIT4); //AD1 ENABLE for(i=0; i<10; i++) j++; SPITXBUF = 0xD000; //MSB FIRST FORMAT ; CHANNEL 1 for(i=0; i<10; i++) j++; test2 = SPIRXBUF; for(i=0; i<200; i++) j++; SET(PORTB,BIT4); //AD1 DISABLE //ADRES1 = (test1&0x0FFF); //ADRES2 = (test2&0X0FFF); ADRES1 = (test1&0x0FFF)<<1; ADRES2 = (test2&0x0FFF)<<1; sprintf(msg,"test: %d %d\n",ADRES1,ADRES2); SCIPrintf(msg);
} }
|