1、郑州大学信息工程学院DSP大作业参考1.C语言事项矩阵相乘:#include #includevoid matrix(int *b,int *c, int *a, int nx, int ny, int nk);int main()int i,j,k,tmp;int b_row,b_col;int c_row,c_col;int a_row,a_col;int *b,*c,*a;printf(输入B矩阵的行数 列数以及C矩阵的列数n);scanf(%d %d,&b_row,&b_col,&c_col);c_row = b_col;a_row = b_row;a_col = c_col;a =
2、(int *) malloc(sizeof(int *) * a_row);for (j=0;ja_row;j+)aj = (int *) malloc(sizeof(int) * a_col);b = (int *) malloc(sizeof(int *) * b_row);for (j=0;jb_row;j+)bj = (int *) malloc(sizeof(int) * b_col);c = (int *) malloc(sizeof(int *) * c_row);for (j=0;jc_row;j+)cj = (int *) malloc(sizeof(int) * c_col
3、);if (!cc_row-1) printf(no enought memoryn);exit(0);printf(输入B阵元素%d%dn,b_row,b_col);for (j=0;jb_row;j+)for (i=0;ib_col;i+)scanf(%d,&tmp);bji = tmp;printf(输入C阵元素%d%dn,c_row,c_col);for (j=0;jc_row;j+)for (i=0;ic_col;i+)scanf(%d,&tmp);cji = tmp;matrix( b ,c,a, a_col, a_row, b_col);for(j=0;ja_row;j+)for
4、 (i=0;ia_col;i+) printf(%d ,aji);printf(n);system(PAUSE); return 0; void matrix(int *b,int *c, int *a, int nx, int ny, int nk)int i,j,k;for (j=0;jny;j+)for(i=0;inx;i+)aji= 0;for(j=0;jny;j+)for(i=0;inx;i+)for(k=0;knk;k+)aji+= bjk*cki;2. C语言实现FFT:#include#include#includetypedef std:complex complex;int
5、 N=16,N1=4; /N为总输入数,N1为总级数int r=0;complex a64,b64;/a64为每一级蝶形算法输入,b64为每一级蝶形算法的输出const double pi=3.141592653589793; int reverse_order(int N,int a) /倒序算法 N为总级数(带入N1) int c20,res=0; for(int i=N-1;i=0;i-) if(a%2=0) ci=0; else ci=1; a=a/2; res+=ci*pow(2,i); return res ;void butterfly(int layer) complex w;
6、 int c1=pow(2,N1-layer); /本级包含基本蝶形算法的次数 int c2=pow(2,layer-1); /本级蝶形算法包含的次数 int c3=pow(2,layer); for(int i=0;ic1;i+) for(int j=0;jc2;j+) r=j*pow(2,N1-layer); w=complex(cos(2*pi*r/N),-sin(2*pi*r/N); bj+i*c3=aj+i*c3+aj+c2+i*c3*w; bj+c2+i*c3=aj+i*c3-aj+c2+i*c3*w; for(int k=0;kN;k+) ak=bk; void fft() in
7、t i; for(i=0;iN1;i+) butterfly(i+1); void main() int i; double num164=1,2,3,4,5,6,7,8,0,0,0,0,0,0,0,0; /输入 double num264; double res; for(i=0;iN;i+) /倒序 num2i=num1reverse_order(N1,i); for(i=0;iN;i+) /初始化 ai=complex(num2i,0); fft(); for(i=0;iN;i+) res=sqrt(ai.real()*ai.real()+ai.imag()*ai.imag(); pri
8、ntf(%ft,X); 3.看门狗软件实现方法:#include #include unsigned int i,num; unsigned char temp;void delay(unsigned int t); int main() num=0; P1=(0x00); TMOD=0x10; TL1=0xB0; TH1=0x3C; ET1=1; EA=1; TF1=0; TR1=1; temp=0x01; for(i=0;i8;i+) P0=temp; delay(100); temp=1; TR1=0; TL1=0xB0; TH1=0x3C; TF1=0; TR1=1; while(1)
9、 temp=0x80; for(i=0;i=1; TR1=0; TL1=0xB0; TH1=0x3C; TF1=0; TR1=1; num=0; return 0;void delay(unsigned int t) register unsigned int bt; for(;t;t-) for(bt=0;bt255;bt+); void int_T1() interrupt 3 using 3 num+; if (num=100) P1=(0x01); 看门狗硬件实现电路:作业:1. 结合实例说明“实时性”与“仿真”的概念。“实时性”是指信号的输入、运算和输出都要在一定的时间内完成,并根据
10、生产过程工况及现场情况变化及时进行处理。而实时系统指在事件或数据产生的同时,能够在规定的时间内给予响应,以足够快的速度处理,及时地将处理结果送往目的地的一种处理系统。例如时钟信号能够准确的定时,各处的时钟能够达到一致,在不同的场合需要达到ns级、s级。“仿真”是应用电子计算机对系统的结构、功能和行为以及参与系统控制的人的思维过程和行为进行动态性比较逼真的模仿。2. 汇编语言实现浮点数相乘:include io32.inc .data msg1 byte 请输入第一个数字,13,10,0 msg2 byte 请输入第二个数字,13,10,0 readbuf1 byte 256 dup(0) re
11、adbuf2 byte 256 dup(0)num byte 00h .codestart: xor ecx,ecx xor ebx,ebx mov eax,offset msg1 call dispmsg mov eax,offset readbuf1 call readmsg mov edx,eax push edx mov esi,offset readbuf1 cmp byte ptr esi,- jz again3again1: cmp byte ptr esi,. jnz again2 push ecx inc esi dec edxagain2: inc ecx mov al,e
12、si sub al,30h imul ebx,10 movzx eax,al add ebx,eax dec edx inc esi cmp edx,00H jnz again1 jmp done1again3: inc esi inc num dec edx jmp again1done1: push ebx pop ebx pop ecx pop edx sub edx,ecx dec edx push ebx push edx xor ecx,ecx xor ebx,ebx mov eax,offset msg2 call dispmsg mov eax,offset readbuf2
13、call readmsg mov edx,eax push edx mov esi,offset readbuf2 cmp byte ptr esi,- jz again6again4: cmp byte ptr esi,. jnz again5 push ecx inc esi dec edxagain5: inc ecx mov al,esi sub al,30h imul ebx,10 movzx eax,al add ebx,eax dec edx inc esi cmp edx,00H jnz again4 jmp done2again6: inc esi inc num dec e
14、dx jmp again4done2: push ebx pop ebx pop ecx pop edx sub edx,ecx dec edx pop ecx pop eax add ecx,edx imul eax,ebx mov ebx,1done3: imul ebx,10 dec ecx cmp ecx,0 jnz done3 mov edx,0 div ebx call dispuid mov eax,. call dispc mov eax,edx call dispuid exit 0end start 3. 实现F2812的硬件看门狗设计:#include DSP281x_D
15、evice.h #include DSP281x_Examples.h interrupt void wakeint_isr(void); Uint32 WakeCount;Uint32 LoopCount;void main(void) InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; EALLOW; PieVectTable.WAKEINT = &wakeint_isr; EDIS; WakeCount = 0; LoopCount = 0; EALLOW; SysCtrlRegs.SCSR = BIT1; ED
16、IS; PieCtrlRegs.PIECRTL.bit.ENPIE = 1; PieCtrlRegs.PIEIER1.bit.INTx8 = 1; IER |= M_INT1; EINT; KickDog( ); EALLOW; SysCtrlRegs.WDCR = 0x0028; EDIS; for(;) LoopCount+; interrupt void wakeint_isr(void) WakeCount+; PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; 4.pc与单片机的串口通信#include#includevoiddelay1ms()unsig
17、nedinti;for(i=500000;i0;i-);/延时Initial_com()TMOD=0x20;/定时器T1PCON&=0xef;SCON=0x50;TH1=0xfd;/波特率设置为9600TL1=0xfd;TR1=1;/开定时器T1运行控制位main()Initial_com();while(1)SBUF=c;while(!TI);delay1ms();delay1ms();TI=0;主程序代码:#includeunsignedcharbutter;voidsend();voidreceive();voidmain()PCON=0x80;SCON=0Xd0;TMOD=0X20;T
18、H1=0Xfd;TL1=0Xfd;TR1=1;TI=1;while(1);receive();send();voidsend()if(TI=1)SBUF=1;TI=0;voidreceive()if(RI=1)ACC=SBUF;butter=ACC;RI=0;4 51串口通信#includemain() unsigned char dat; TMOD=0x20; TH1=TL1=0xfd; SCON=0x50; TR1=1; while(1) if(RI)/接收 RI=0; dat=SBUF; SBUF=dat;/发送 while(!TI); TI=0; 2、中断方式:#includeunsi
19、gned char dat;bit flag;void uart_isr() interrupt 4 if(RI)/接收 RI=0; dat=SBUF; flag=1; if(TI)TI=0;main() TMOD=0x20; TH1=TL1=0xfd; SCON=0x50; TR1=1; EA=1; ES=1; flag=0; while(1) if(flag) SBUF=dat; flag=0; 5. 实现F2812片内外设eCan的功能:#include DSP281x_Device.h /头文件#include DSP281x_Examples.h /函数声明void mailbox_
20、check(int32 T1, int32 T2, int32 T3);void mailbox_read(int16 i);/全局变量Uint32 ErrorCount;Uint32 MessageReceivedCount;Uint32 TestMbox1 = 0;Uint32 TestMbox2 = 0;Uint32 TestMbox3 = 0;/主函数void main(void) Uint16 j; struct ECAN_REGS ECanaShadow; /步骤1.初始化系统控制(PLL, 看门狗,使能外设时钟) InitSysCtrl(); /步骤2.初始化 GPIO /Ini
21、tGpio(); /本例中略过 /步骤3.清除所有中断并初始化PIE向量表 DINT; /禁止 CPU 所有中断 /初始化 PIE 控制寄存器组. /InitPieCtrl(); /本例中略过 /禁止CPU所有中断并清除所有中断标志位 IER = 0x0000; IFR = 0x0000; /InitPieVectTable(); /本例中略过 /步骤4.初始化所有外设 /InitPeripherals(); /本例中不需要 /步骤5.用户程序段 MessageReceivedCount = 0; ErrorCount = 0; InitPieCtrl();/初始化PIE中断 InitPieV
22、ectTable;/初始化PIE中断矢量表 InitECan(); /初始化eCAN /可以一次向邮箱写16位或32位数据 /向发送邮箱MBOX015写入MSGID(ID号) ECanaMboxes.MBOX0.MSGID.all = 0x9555AAA0; ECanaMboxes.MBOX1.MSGID.all = 0x9555AAA1; ECanaMboxes.MBOX2.MSGID.all = 0x9555AAA2; ECanaMboxes.MBOX3.MSGID.all = 0x9555AAA3; ECanaMboxes.MBOX4.MSGID.all = 0x9555AAA4; EC
23、anaMboxes.MBOX5.MSGID.all = 0x9555AAA5; ECanaMboxes.MBOX6.MSGID.all = 0x9555AAA6; ECanaMboxes.MBOX7.MSGID.all = 0x9555AAA7; ECanaMboxes.MBOX8.MSGID.all = 0x9555AAA8; ECanaMboxes.MBOX9.MSGID.all = 0x9555AAA9; ECanaMboxes.MBOX10.MSGID.all = 0x9555AAAA; ECanaMboxes.MBOX11.MSGID.all = 0x9555AAAB; ECanaM
24、boxes.MBOX12.MSGID.all = 0x9555AAAC; ECanaMboxes.MBOX13.MSGID.all = 0x9555AAAD; ECanaMboxes.MBOX14.MSGID.all = 0x9555AAAE; ECanaMboxes.MBOX15.MSGID.all = 0x9555AAAF; /向接收邮箱 MBOX1631写入MSGID(ID号) ECanaMboxes.MBOX16.MSGID.all = 0x9555AAA0; ECanaMboxes.MBOX17.MSGID.all = 0x9555AAA1; ECanaMboxes.MBOX18.M
25、SGID.all = 0x9555AAA2; ECanaMboxes.MBOX19.MSGID.all = 0x9555AAA3; ECanaMboxes.MBOX20.MSGID.all = 0x9555AAA4; ECanaMboxes.MBOX21.MSGID.all = 0x9555AAA5; ECanaMboxes.MBOX22.MSGID.all = 0x9555AAA6; ECanaMboxes.MBOX23.MSGID.all = 0x9555AAA7; ECanaMboxes.MBOX24.MSGID.all = 0x9555AAA8; ECanaMboxes.MBOX25.
26、MSGID.all = 0x9555AAA9; ECanaMboxes.MBOX26.MSGID.all = 0x9555AAAA; ECanaMboxes.MBOX27.MSGID.all = 0x9555AAAB; ECanaMboxes.MBOX28.MSGID.all = 0x9555AAAC; ECanaMboxes.MBOX29.MSGID.all = 0x9555AAAD; ECanaMboxes.MBOX30.MSGID.all = 0x9555AAAE; ECanaMboxes.MBOX31.MSGID.all = 0x9555AAAF; /配置邮箱015作为发送邮箱,1631作为接收邮箱 /因为在这里写操作是针对整个寄存器而不是某一位,所以不需要映射寄存器组 ECanaRegs.CANMD.all = 0xFFFF0000; /使能所有的邮箱 ECanaRegs.CANME.all = 0x
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1