xl773 发表于 2013-2-20 19:52:24

请教如此操作来接收SSP的数据是否正确?

本帖最后由 xl773 于 2013-2-20 23:03 编辑

void TIMER32_0_IRQHandler(void)
{
    volatile static uint32_t b[] = {0,0,0 };
                 static uint32_t i = 0;
                 static uint32_t Full = 0;

                     LPC_TMR32B0->IR = 0x01;               //清中断


        if ( Full != 1 )
        {
                  LPC_SSP0->DR = VOLTAGE;                               //发送转换通道
                        while( (LPC_SSP0->SR & (1<<4)) != 0 );                  //等待通信完成,总线空闲
                        b = LPC_SSP0->DR;                                       
                        i++;
                        if ( i == 3 )
                  {
                          Full = 1;
                                i = 0 ;
                                       
                        }
                                                    
       }               
}


请教如此操作来接收SSP的数据是否正确?
我现在是利用LPC1114的SSP口和一个AD来通信,此AD有四个通道,但是目前我发送“VOLTAGE”通道以进行此通道的转换,但是每次回来存放到b[]里的数据总是第一通道的数据(VOLTAGE是第三通道),不知道采用我写的程序的方式能不能正常读SSP的数据呢?请指教
ps:此AD上电后第一次转换总是转换第一通道,每次发送的转换通道号其实是下一次要转换的通道,此次得到的数据是上一次设置的通道的数据。按我的程序b[]里的数据应为{第一通道,第三通道,第三通道},但目前都是第一通道。AD是ADC124S051,TI的

    而且我发现一个问题:当在LPC_SSP0->DR = VOLTAGE打断点,然后执行这句,发现DR已经有返回的数据了,但是接收FIFO为空,这意味着如果接收FIFO为空的情况下接收一个数据,此数据直接进入DR而导致接收FIFO空么?但是手册上似乎说是要判断接收FIFO未空才读DR的,我之前判断导致一直死循环出不来。   
    另外,当进中断单步运行到while( (LPC_SSP0->SR & (1<<4)) != 0 ),然后执行这句,发现DR的数据没了,变全0了,这是为什么呢?




页: [1]
查看完整版本: 请教如此操作来接收SSP的数据是否正确?