|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求助!!!!2407A的編程問題!! |
| 作者:boyzrd007 欄目:DSP技術(shù) |
我需要設(shè)計(jì)一個(gè)數(shù)據(jù)采集系統(tǒng),用2407A自帶的ADC模塊進(jìn)行數(shù)據(jù)采集,采用EVA的T1通用定時(shí)是周期中斷的方式啟動(dòng)AD,每周期采樣128點(diǎn),采樣的數(shù)據(jù)通過串口上傳給PC,要用到2407A的SCI模塊.DSP接收命令采用中斷方式,發(fā)送數(shù)據(jù)采用查詢方式.通信采用空閑線模式,給DSP的地址是001,只有地址相符才接收命令.程序如下: #include "2407c.h" #include <math.h> #define MAX 128 void interrupt gptime1(void); /*通用定時(shí)中斷程序*/ void interrupt scirec(void); /* SCI中斷程序 */ void SCIREAD(void); /*SCI讀數(shù)據(jù)子程序*/ void send_string(CHAR *txd_data,unsigned int data_i); /*發(fā)送字符子程序*/ void send_data(LONG *txd_data); /*發(fā)送數(shù)據(jù)子程序*/ LONG sum_watt(void); /*計(jì)算功率子程序*/ void ADInit(void); /* 初始化A/D轉(zhuǎn)換模塊和通用定時(shí)器1聲明 */ void wait(int nWait);/*延時(shí)子程序*/ float bubble_sort(float *R); /*冒泡排序,找出中間兩個(gè)值,取平均值*/ CHAR cString[27]={ "The AD is not on work,Over|" }; unsigned int *ADV_Result,*ADI_Result; int AD_V[MAX],AD_I[MAX]; unsigned int TEMP,tem,count,uWork; unsigned int uWorks1,uWorks2,uWorks3; unsigned int uWorkt1,uWorkt2; LONG int POWER,sort_watt[30],watt; float sub_data1[10],sub_data2[10]; float subq1,subq2; CHAR dReceive; int cReceive,require; unsigned int ADwork; main() { count=0; asm(" setc INTM"); asm(" clrc SXM"); asm(" clrc OVM"); asm(" clrc CNF"); *WDCR=0x6f; *WDKEY=0x5555; *WDKEY=0xaaaa; /*關(guān)看門狗電路*/ *SCSR1=0x81fe; /* 40MHZ */ ADV_Result=RESULT0; /*指針指向AD結(jié)果寄存器*/ ADI_Result=RESULT1; /*指針指向AD結(jié)果寄存器*/ *MCRB=0x00; *MCRC=0x00; uWork=(*MCRA); uWork|=0x03; /* IOPA0和IOPA1分別作SCITXD,SCIRXD用 */ (*MCRA)=uWork; *PADATDIR=(*PADATDIR)|0xf8f8; /*相應(yīng)AnDIR設(shè)置為1,表示向相應(yīng)IO設(shè)置1或0*/ *PADATDIR=(*PADATDIR)&0xfff7; /*IOPA3=0,蜂鳴器響,低電平有效*/ *PADATDIR=(*PADATDIR)|0x00f0; /*IOPA4=1,報(bào)警燈亮 ,高電平有效*/ wait(100); *PADATDIR=(*PADATDIR)|0x0008;/*IOPA3=1,蜂鳴器不響 */ *PADATDIR=(*PADATDIR)&0xff0f;/*IOPA4=0, 報(bào)警燈不亮 */ *PFDATDIR=(*PFDATDIR)|0x6060; /*按鍵口,IOPF5,IOPF6*/ ADInit(); /*初始化AD*/ (*SCICCR)=0x07; /* 8位字符,1停止位,無校驗(yàn),空閑線模式*/ (*SCICTL1)=0x07; /* 使能休眠,發(fā)送和接收 */ (*SCICTL2)=0x02; /* 禁止發(fā)送中斷,使能接收中斷 */ (*SCIPRI)=0x60; /*設(shè)置SCI接收中斷優(yōu)先級(jí)低*/ (*SCIHBAUD)=0x02; /* 波特率=208H,40MHZ */ (*SCILBAUD)=0x08; /* 208h=40*10^6/(9600*8)-1 */ (*SCICTL1)=0x27; /* 使能發(fā)送和接收,復(fù)位SCI */ (*IMR)=0x12; /*使能INT2和INT5中斷,即定時(shí)器中斷和SCI接收中斷*/ (*IFR)=0xffff; /*清所以中斷標(biāo)志*/ asm(" clrc INTM"); /*開中斷*/ while(1) /*循環(huán)等待命令或計(jì)算功率*/ { if(require==0xAA) /*命令0xAA為啟動(dòng)AD轉(zhuǎn)換*/ { asm(" setc INTM"); *T1CON= 0x1040; (*IMR)=0x12; (*IFR)=0xffff; require=0; ADwork=1; asm(" clrc INTM"); } else if (require==0xAB) /*命令0xAB為停止AD轉(zhuǎn)換*/ { asm(" setc INTM"); *T1CON = 0x1000;/*禁止定時(shí)器工作*/ *ADCTRL1=0x4000; /*復(fù)位AD*/ asm("nop"); *ADCTRL1=0x0000; ADwork=0; require=0; asm(" clrc INTM"); } else if(require==0xAC) /*命令0xAC為向上位機(jī)發(fā)送功率*/ { (*IMR)=0x00; /*屏蔽中斷*/ if (ADwork==1) /*如果AD已經(jīng)開始工作 */ { do { |
| 2樓: | >>參與討論 |
| 作者: f702p 于 2006/5/29 10:43:00 發(fā)布:
sci中斷有很多毛病呀 如題 |
|
| 3樓: | >>參與討論 |
| 作者: savage_sdj 于 2006/7/4 22:37:00 發(fā)布:
SCI的中斷向量是否正確?! SCI的中斷向量是否正確?! |
|
| 4樓: | >>參與討論 |
| 作者: lengxb 于 2006/7/11 22:11:00 發(fā)布:
re 這個(gè)問題先一步步來,不要一起來查毛病。 首先調(diào)好AD,再調(diào)好SCi,然后合起來調(diào)試,解決中斷問題 |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |