微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于LPC2366用ads调试ssp的spi模式(用中断的方式)

关于LPC2366用ads调试ssp的spi模式(用中断的方式)

时间:10-02 整理:3721RD 点击:
周立功给的spi传输,用的查询方式,如下:uint8 SPI_RW_Byte(uint8 data)
{
       
       uint8 back;
       
        while ( (SSP1SR & 0x02) == 0 );                            // 发送FIFO未满时跳出循环
        SSP1DR = (uint16)data ;                                                                // ADE7878读命令
    while ((SSP1SR & 0x10) == 0x10);                         // 接受FIFO不为空时跳出循环
        back = SSP1DR;                                                                // 将数据寄存器中数据读出
       
        return back;
}

由于传输数据量较大,想用ssp的中断方式进行传输,而ssp的中断就四种中断,我想用第三种,即接受FIFO一半为满时,
相应位中断使能会有产生中断,然后再编写中断服务子程序完成数据的读出,可是不知道我编完程序后,进步去中断服
务子程序,关于IRQ的已经使能了(总程序里还有一个Timer1中断,程序能进入服务子程序),下面附部分需要设置的
相关程序,求帮忙,毕设迫在眉睫。
          
        VICVectPri8  = 8;                // 3                // 设置SSPI1中断高优先级
        VICVectAddr8 = (uint32)IRQ_SSP1;        // 设置中断服务程序地址                                       
        VICIntEnable = 1 << 11;                            // 使能SSP1器1中断       

void __irq IRQ_SSP1(void)
{      
        BEEPON();
       SPI1rcvdata1=SSP1DR;
       SPI1rcvdata2=SSP1DR;
       SPI1rcvdata3=SSP1DR;
       SPI1rcvdata4=SSP1DR;
  // VICSoftIntClr = 0x000008000;
   VICVectAddr = 0x00;                                        // 通知VIC中断处理结束
}

   void  SPI_R32Byte(void)
{


    while((SSP1RIS & 0x04)== 0);//判断Rx FIFO是否有一半为满
    SSP1IMSC=0x04;                //当满足中断条件时,使能中断

     }
   void  SPI_W8Byte(uint8 data)
{   
    while ( (SSP1SR & 0x02) == 0 );                            // 发送FIFO未满时跳出循环
   SSP1DR = (uint16)data;                          // ADE7878读命令
}


uint32 Read_ADE7878(uint16 add)
{
        uint32 outdata;
        static uint32 temp;
        uint8 add_h, add_l;
        add_h = (uint8)(add>>8);
        add_l = (uint8)(add&0x00FF);       
       
        SS_1;
//        SPI_Delay(20);
        SS_0;
        SPI_W8Byte(0x01);                        // 读命令
        SPI_W8Byte(add_h);                        // ADE7878寄存器高地址
        SPI_W8Byte(add_l);                        // ADE7878寄存器低地址
        SPI_R32Byte();
                                      // 读出ADE7878寄存器中高8位数据
        temp = SPI1rcvdata1;
        outdata = (temp<<24);
        temp = SPI1rcvdata2;        // 读出ADE7878寄存器中次高8位数据
        outdata += (temp<<16);
        temp = SPI1rcvdata3;        // 读出ADE7878寄存器中低8位数据
        outdata += (temp<<8);
        temp = SPI1rcvdata4;        // 读出ADE7878寄存器中最低8位数据
        outdata += (temp<<0);
       
        SS_1;
    return (outdata);
}

..程序太长被打乱了。求帮助呀= =

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top