[size=13.3333330154419px] 你好,我处最近在使用ADuC7039芯片的SPI通讯(从机模式)时,从机无法发出任何数据和信号,尝试了很多方法依然不行。以下是我的SPI通讯的从机程序主要部分,请帮忙核查或者纠正一下,或者直接提供该芯片的SPI通讯例程也行。谢谢贵公司的帮助!
[size=13.3333330154419px]int main(void)
[size=13.3333330154419px]{
[size=13.3333330154419px]while((PLLSTA&0x2)==0) {} // Ensure That thePLL is locked to the 3%
[size=13.3333330154419px] // SysClock=20.48MHz/2=10.24MHz (POWCON:CD=1 by default)
[size=13.3333330154419px]//-------void main()------------
[size=13.3333330154419px] GPCON = 0x00001111; // GPIO configured as SPI IO
[size=13.3333330154419px] GPSET = 0x00000000; // GPSET=0 does not affect GPIO output level
[size=13.3333330154419px] GPCLR = 0x00000000; // GPCLR=0 does not affect GPIO output level
[size=13.3333330154419px]// GPDAT = 0x34000000; //GPIO_2(MISO)/4/5 set as output, write 1; others GPIO_x£¨/SS, SCLK, MOSI£©as input
[size=13.3333330154419px] GPDAT = 0x30000000; //--4/5 set as output, write 1; SPI不用去设置了吗?
[size=13.3333330154419px] SPICON = 0x0809;//=0x0009;//0x0005;//=0x4861; // 这几个都试过了,不行!
[size=13.3333330154419px]/* IRQ/FIR setup */
[size=13.3333330154419px] IRQ = Vector_IRQ; // no use?
[size=13.3333330154419px] FIQ = Vector_FIQ;
[size=13.3333330154419px] IRQEN = 0x00000020; // SPI int
[size=13.3333330154419px] FIQEN = 0x00000100; // ADuC7039 only: Enable ADC int
[size=13.3333330154419px] while(1) // Infinite Loop
[size=13.3333330154419px] { }
[size=13.3333330154419px]}
[size=13.3333330154419px]/* FIQ service */
[size=13.3333330154419px]void Vector_FIQ(void)
[size=13.3333330154419px]{
[size=13.3333330154419px].....省略....//
[size=13.3333330154419px]}
[size=13.3333330154419px]void IRQ_Handler()__irq //SPI int
[size=13.3333330154419px] {
[size=13.3333330154419px] unsigned short temp_SPI;
[size=13.3333330154419px] temp_SPI = IRQSTA;
[size=13.3333330154419px]// if((IRQSTA & 0x200) != 0x000) // IRQSTA[9]-> SPI
[size=13.3333330154419px] if((SPISTA & 0x1) != 0x0) //
[size=13.3333330154419px] {
[size=13.3333330154419px] GPSET = 0x00100000; // 此处用来点亮二极管,用以判断是否产生该中断。结果灯已点亮!!
[size=13.3333330154419px] SPI_rd_data = SPIRX; //接着在MISO端口上始终是高电平,没有任何变化!
[size=13.3333330154419px] switch (SPI_rd_data)
[size=13.3333330154419px] {
[size=13.3333330154419px] case 1:
[size=13.3333330154419px] SPITX= 0x01; //ADC_T;
[size=13.3333330154419px] break;
[size=13.3333330154419px] case 2:
[size=13.3333330154419px] SPITX= 0x22; //ADC_V;
[size=13.3333330154419px] break;
[size=13.3333330154419px] case 3:
[size=13.3333330154419px] SPITX= 0x33; //ADC_I;
[size=13.3333330154419px] break;
[size=13.3333330154419px] case 4:
[size=13.3333330154419px] SPITX= 0x44; //ADC0ACC;
[size=13.3333330154419px] break;
[size=13.3333330154419px] default:
[size=13.3333330154419px] break;
[size=13.3333330154419px] }
[size=13.3333330154419px] }
[size=13.3333330154419px] return;
[size=13.3333330154419px] }