F28335CCS代码问题

2019-07-22 15:15发布

//###########################################################################
//
//

//
//       $Boot_Table:
//
//         GPIO87   GPIO86     GPIO85   GPIO84
//          XA15     XA14       XA13     XA12
//           PU       PU         PU       PU
//        ==========================================
//            1        1          1        1    Jump to Flash
//            1        1          1        0    SCI-A boot
//            1        1          0        1    SPI-A boot
//            1        1          0        0    I2C-A boot
//            1        0          1        1    eCAN-A boot
//            1        0          1        0    McBSP-A boot
//            1        0          0        1    Jump to XINTF x16
//            1        0          0        0    Jump to XINTF x32
//            0        1          1        1    Jump to OTP
//            0        1          1        0    Parallel GPIO I/O boot
//            0        1          0        1    Parallel XINTF boot
//            0        1          0        0    Jump to SARAM            <- "boot to SARAM"
//            0        0          1        1    Branch to check boot mode
//            0        0          1        0    Boot to flash, bypass ADC cal
//            0        0          0        1    Boot to SARAM, bypass ADC cal
//            0        0          0        0    Boot to SCI-A, bypass ADC cal
//                                              Boot_Table_End$//
//###########################################################################


#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File

// 申明用到的子函数
void delay_loop(Uint32 a);
void Gpio_select(void);
void scia_echoback_init(void);
void scia_fifo_init(void);

unsigned char Step_table11[]={0x0001,0x0002};
unsigned char Step_table12[]={0x0002,0x0001};
unsigned char Step_table21[]={0x0004,0x0008};
unsigned char Step_table22[]={0x0008,0x0004};
unsigned char Step_table31[]={0x0010,0x0020};
unsigned char Step_table32[]={0x0020,0x0010};
unsigned char Step_table41[]={0x0040,0x0080};
unsigned char Step_table42[]={0x0080,0x0040};
unsigned char Step_table51[]={0x0100,0x0200};
unsigned char Step_table52[]={0x0200,0x0100};
unsigned char Step_table61[]={0x0400,0x0800};
unsigned char Step_table62[]={0x0800,0x0400};

// Global counts used in this example
Uint16 LoopCount;
Uint16 ErrorCount;
Uint16 rdata[18];     //SCI-A接收的数据

void main(void)
{
unsigned int i,j;
Uint16 k;

// 步骤 1. 初始化系统控制:
// 设置PLL, WatchDog, 使能外设时钟
// 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到.
   InitSysCtrl();

// 步骤 2. 初始化通用输入输出多路复用器GPIO:
// 这个函数在DSP2833x_Gpio.c源文件中被定义了
// 这个函数使GPIO控制类寄存器初始化到默认状态
// InitGpio();  // Skipped for this example

// For this example use the following configuration:
   Gpio_select();

// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
   DINT;

// Initialize PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.
   InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:
   IER = 0x0000;
   IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example.  This is useful for debug purposes.
// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.
   InitPieVectTable();


// Step 4. Initialize all the Device Peripherals:
// This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example

// 步骤 5. 用户特定的代码来允许中断

// 步骤 6. 空循环. 仅无限循环等待中断:
   LoopCount = 0;
   ErrorCount = 0;

   scia_fifo_init();           // Initialize the SCI FIFO
   scia_echoback_init();  // Initalize SCI for echoback

   while(SciaRegs.SCIFFRX.bit.RXFFST != 1) { }

   for(k=0;k<18;k++)
   {
     rdata[k]=SciaRegs.SCIRXBUF.all; //读取数据
   }

   if(rdata[0]==0 & rdata[1]!=0)
   {
           i=36000000/rdata[1];
           j=rdata[2]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table11[i]; //GPIO2-GPIO5依次输出高电平
                   delay_loop(i);
           }
   }

//反转
   if(rdata[0]==1 & rdata[1]!=0)
   {
           i=36000000/rdata[1];
           j=rdata[2]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table12[i];
                   delay_loop(i);
           }
   }

   if(rdata[3]==0 & rdata[4]!=0)
   {
           i=36000000/rdata[4];
           j=rdata[5]/0.24;
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table21[i];
                   delay_loop(i);
           }
   }

//反转
   if(rdata[3]==1 & rdata[4]!=0)
   {
           i=36000000/rdata[4];
           j=rdata[5]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table22[i];
                   delay_loop(i);
           }
   }

   if(rdata[6]==0 & rdata[7]!=0)
   {
           i=36000000/rdata[7];
           j=rdata[8]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table31[i];
                   delay_loop(i);
           }
   }

//反转
   if(rdata[6]==1 & rdata[7]!=0)
   {
           i=36000000/rdata[7];
           j=rdata[8]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table32[i];
                   delay_loop(i);
           }
   }

  if(rdata[9]==0 & rdata[10]!=0)
   {
           i=36000000/rdata[10];
           j=rdata[11]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table41[i];
                   delay_loop(i);
           }
   }

//反转
  if(rdata[9]==1 & rdata[10]!=0)
   {
           i=36000000/rdata[10];
           j=rdata[11]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table42[i];
                   delay_loop(i);
           }
   }

   if(rdata[12]==0 & rdata[13]!=0)
   {
           i=36000000/rdata[13];
           j=rdata[14]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table51[i];
                   delay_loop(i);
           }
   }

//反转
   if(rdata[12]==1 & rdata[13]!=0)
   {
           i=36000000/rdata[13];
           j=rdata[14]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table52[i];
                   delay_loop(i);
           }
   }

   if(rdata[15]==0 & rdata[16]!=0)
   {
           i=36000000/rdata[16];
           j=rdata[17]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table61[i];
                   delay_loop(i);
           }
   }

//反转
   if(rdata[15]==1 & rdata[16]!=0)
   {
           i=36000000/rdata[16];
           j=rdata[17]/0.24; //改变这个值可以控制转动周数。
           while(j--)
           {
                   GpioDataRegs.GPADAT.all=Step_table62[i];
                   delay_loop(i);
           }
   }
   LoopCount++;
}


//延时函数
void delay_loop(Uint32 a)
{
   while(a--);
}

//初始化GPIO
void Gpio_select(void)
{


    EALLOW;
        GpioCtrlRegs.GPAMUX1.all = 0x00000000;  // All GPIO
        GpioCtrlRegs.GPAMUX2.all = 0x00000000;  // All GPIO
        GpioCtrlRegs.GPBMUX1.all = 0x00000000;  // All GPIO
    GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;   // All outputs
    GpioCtrlRegs.GPBDIR.all = 0x0000000F;   // All outputs

         //GPIO0-GPIO31输出低电平
   GpioDataRegs.GPADAT.all=0x00000000;
   EDIS;
    EDIS;

}

// Test 1,SCIA  DLB, 8-bit word, baud rate 0x000F, default, 1 STOP bit, no parity
void scia_echoback_init()
{
    // Note: Clocks were turned on to the SCIA peripheral
    // in the InitSysCtrl() function

        SciaRegs.SCICCR.all =0x0007;   // 1 stop bit,  No loopback
                                   // No parity,8 char bits,
                                   // async mode, idle-line protocol
        SciaRegs.SCICTL1.all =0x0003;  // enable TX, RX, internal SCICLK,
                                   // Disable RX ERR, SLEEP, TXWAKE
        SciaRegs.SCICTL2.all =0x0003;
        SciaRegs.SCICTL2.bit.TXINTENA =1;
        SciaRegs.SCICTL2.bit.RXBKINTENA =1;
        #if (CPU_FRQ_150MHZ)
              SciaRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 37.5MHz.
              SciaRegs.SCILBAUD    =0x00E7;
        #endif
        #if (CPU_FRQ_100MHZ)
      SciaRegs.SCIHBAUD    =0x0001;  // 9600 baud @LSPCLK = 20MHz.
      SciaRegs.SCILBAUD    =0x0044;
        #endif
        SciaRegs.SCICTL1.all =0x0023;  // Relinquish SCI from Reset
}

// Transmit a character from the SCI
//void scia_xmit(int a)
//{
//    while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {}
//    SciaRegs.SCITXBUF=a;

//}

//void scia_msg(char * msg)
//{
//    int i;
//    while(msg[i] != '')
//    {
//        scia_xmit(msg[i]);
//        i++;
//    }
//}

// Initalize the SCI FIFO
void scia_fifo_init()
{
    SciaRegs.SCIFFTX.all=0xE040;
    SciaRegs.SCIFFRX.all=0x204f;
    SciaRegs.SCIFFCT.all=0x0;

}
//===========================================================================
// No more.
//===========================================================================

本人小白,东凑西凑代码,希望这个代码能够接收上位机的18个数据,然后使GPIO0~GPIO11引脚输出高电平(脉冲),然后DSP好像没反应,求解
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
Ervin0000
1楼-- · 2019-07-22 18:49
我用的是CCS5.5,希望能有好心人帮我解惑
vibra2016
2楼-- · 2019-07-22 19:23
 精彩回答 2  元偷偷看……

一周热门 更多>