ADI 技术
直播中

杨月粉

7年用户 222经验值
私信 关注
[问答]

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

[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]    }

回帖(1)

李正茂

2018-9-27 11:50:45
请将您的问题发送到英文论坛讨论:
https://ez.analog.com/welcome
举报

更多回帖

发帖
×
20
完善资料,
赚取积分