单片机/MCU论坛
直播中

李鑫

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

使用ADuC7039的SPI通讯时,从机无法发出任何数据和信号怎么解决?

你好,我处最近在使用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;
}

回帖(1)

更多回帖

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