关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙
[复制链接]
关于30FSPI通讯的问题,困扰我好长时间了,请大侠帮忙
本人刚开始用PIC,要通过30F6011往30F2020里面送数据,现在先通过6011往2020里面送一个数据,再把这个数据送给2020的占空比寄存器,改变2020PWM2的占空比。但总是传输的数据不稳定,传送同样的一个数据每次占空比都不一样,检查了好几天,都查不出原因,实在没有办法了,请各位帮忙看一下,感激不尽。下面分别是6011的程序和2020的程序 6011的程序: #include"p30f6011A.h" _FOSC(0x0c302); //HS晶振,Failsafe 时钟关闭 _FWDT(WDT_OFF); //关闭看门狗定时器 _FBORPOR(PBOR_OFF & MCLR_EN); //掉电复位禁止,MCLR复位使能。 _FGS(CODE_PROT_OFF); //代码保护禁止
void initspi(); void spi(); void main() { initspi(); SPI2BUF=0x8800; while(SPI2STATbits.SPITBF==1); IFS1bits.SPI2IF=0; SPI2STATbits.SPIROV=0; }
void initspi() { SPI2CON=0x047b; SPI2STATbits.SPIROV=0; SPI2STATbits.SPIEN=1; }
2020的程序: .global __reset; .global __SPI1Interrupt; .include "p30f2020.inc" __reset: ;软件器件复位 nop
;PWM2 mov #0x0001, w1 ;PWM2控制寄存器设置 0X0411; mov w1, PWMCON2 mov #0xc800, w1 ;PWM2引脚设置0xc800 mov w1, IOCON2 mov #2000, w1 ;定义死区时间 mov w1, DTR2 mov w1, ALTDTR2 mov #0, w1 mov w1, PHASE2 mov #24000, w1 ;PWM2周期设置 mov w1, PTPER
mov #0x8000, w1 ;PWM控制寄存器 mov w1, PTCON clr LATE mov #0XFF00, w1 mov w1, TRISE mov #20000,w0 mov w0,PDC2
;spi clr SPI1BUF bclr IFS0,#SPI1IF bset IEC0,#SPI1IE mov #0x0007,w1 mov w1,IPC2 mov #0x0c59,w0 mov w0,SPI1CON1 ;从模式, bclr SPI1STAT,#SPIROV bset SPI1STAT,#SPIEN loop: nop bra End_Loop End_Loop: bra loop /*****SPI Interrupt Service Routine*********/ __SPI1Interrupt: disi #7 push.s bclr IFS0 #SPI1IF, bclr SPI1STAT, #SPIROV mov SPI1BUF, w0 nop mov w0,PDC2 bset IEC0,#SPI1IE nop pop.s retfie
|