已回答假定已回答

紧急:咨询ADuC7039的SPI通讯故障问题(红色内容表示已有现象)

Phoenix007 在 2015-6-16 詢問的問題
最後回覆由adi_susan於2015-6-24提供

      你好,我处最近在使用ADuC7039芯片的SPI通讯(从机模式)时,从机无法发出任何数据和信号,尝试了很多方法依然不行。以下是我的SPI通讯的从机程序主要部分,请帮忙核查或者纠正一下,或者直接提供该芯片的SPI通讯例程也行。谢谢贵公司的帮助!

int main(void)

{

while((PLLSTA&0x2)==0) {}   // Ensure That thePLL is locked to the 3%

                                  // SysClock=20.48MHz/2=10.24MHz (POWCON:CD=1 by default)      

//-------void main()------------

    GPCON = 0x00001111;      //  GPIO configured as SPI IO

    GPSET = 0x00000000;      // GPSET=0 does not affect GPIO output level

    GPCLR = 0x00000000;      // GPCLR=0 does not affect GPIO output level

//  GPDAT = 0x34000000;      //GPIO_2(MISO)/4/5 set as output, write 1; others GPIO_x£¨/SS, SCLK, MOSI£©as input

    GPDAT = 0x30000000;      //--4/5 set as output, write 1; SPI不用去设置了吗?

    SPICON = 0x0809;//=0x0009;//0x0005;//=0x4861;   // 这几个都试过了,不行!

/* IRQ/FIR setup */       

    IRQ = Vector_IRQ;                       // no use?

    FIQ = Vector_FIQ;

    IRQEN = 0x00000020;                     // SPI int

    FIQEN = 0x00000100;                     // ADuC7039 only: Enable ADC int     

    while(1)                                // Infinite Loop

    { }

}

 

/* FIQ service */

void Vector_FIQ(void)

{

.....省略....//

}

 

void IRQ_Handler()__irq             //SPI int

    {

        unsigned short temp_SPI;

        temp_SPI = IRQSTA;

//  if((IRQSTA & 0x200) != 0x000)       //  IRQSTA[9]-> SPI

        if((SPISTA & 0x1) != 0x0)       //  

        {

            GPSET = 0x00100000;      // 此处用来点亮二极管,用以判断是否产生该中断。结果灯已点亮!!

            SPI_rd_data = SPIRX;     //接着在MISO端口上始终是高电平,没有任何变化!

            switch (SPI_rd_data)

            {

                case 1:

                    SPITX= 0x01;  //ADC_T;

                        break;

                case 2:

                    SPITX= 0x22;   //ADC_V;

                        break;

                case 3:

                    SPITX= 0x33;   //ADC_I;

                        break;

                case 4:

                    SPITX= 0x44;   //ADC0ACC;

                        break;

                default:

                        break;

           

        }

        return;

    }

結果