⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 signal_process.c

📁 串口通讯程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    buf[5] = (char)(data + 48 );
    for(i = 0;i < 6; i++)
    {
      packet[packet_pointer + i] = buf[i];
    }

    packet_pointer += 6;
/*
    buf[6] = 0;
    Usart_init();
    datalength = 7;
    usart_output(buf);
    datalength =1;
    usart_output("\n");
*/
    //adc_delay(5000000);
  }
  /*if(statement == 1)
  {
    return;
  }*/
}

//#####################################################
//         关于AD采样的函数
// 结束
//######################################################



//#####################################################
//         关于DA输出的函数
// 开始
//######################################################

void AT91F_CfgDAC()
{
  AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
  //AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOB ) ;

  //AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,AT91C_DAC_LDAC);
  //AT91F_PIO_Enable(AT91C_BASE_PIOB,AT91C_DAC_LDAC);
  //AT91F_PIO_SetOutput(AT91C_BASE_PIOB,AT91C_DAC_LDAC);

  AT91F_SPI_CfgPIO2();	
  //* \brief Enable Peripheral clock in PMC for  SPI	
  AT91F_SPI_CfgPMC();

  //* Reset the SPI
  AT91F_SPI_Reset(AT91C_BASE_SPI);

  //* Configure SPI in Master Mode with No CS selected !!! AT91C_SPI_DLYBCS|
  AT91F_SPI_CfgMode(AT91C_BASE_SPI,AT91C_SPI_MSTR | AT91C_SPI_PS_FIXED|AT91C_SPI_MODFDIS | AT91C_SPI_PCS);

  //* Configure SPI CS1 register for Serial dac

  AT91F_SPI_CfgCs(AT91C_BASE_SPI,AT91C_DAC_CS2,AT91C_SPI_BITS_16 |(AT91C_SPI_DLYBS & 0x100000)| ((MCK / (2*DAC_CLK)) << 8));

  AT91F_SPI_Enable(AT91C_BASE_SPI);
}

void  AT91F_DisDAC()
{
  AT91F_SPI_Disable(AT91C_BASE_SPI);
}

void AT91F_DAC_senddata(int ch,int data)
{
  while(*AT91C_SPI_SR&AT91C_SPI_TDRE==0);
  AT91F_SPI_PutChar(AT91C_BASE_SPI,((ch<<12)|(data&0xfff)),AT91C_DAC_CS2);

}

void dac_write(int ch,int data)
{

  AT91F_CfgDAC();

  AT91F_SPI_CsSel(AT91C_DAC_CS2);

  AT91F_DAC_senddata(AT91_DAC_CTRL0,CTRL0_DATA);

  AT91F_DAC_senddata(AT91_DAC_CTRL1,CTRL1_DATA);

  AT91F_DAC_senddata(ch&0x7,data);

  //AT91F_PIO_ClearOutput(AT91C_BASE_PIOB,AT91C_DAC_LDAC);
  adc_delay(100);
  //AT91F_PIO_SetOutput(AT91C_BASE_PIOB,AT91C_DAC_LDAC);
  AT91F_DisDAC();
}



void dac_test(unsigned char da_command_packet[])
{
  int data_da;
  int ch,i,DA_packet_pointer;
  int x,y,z,t;
  for(i = 0;i < 8;i++)
  {
    switch(i)
    {
      case 0:
        DA_packet_pointer = 4;
        ch = 0;
        break;
      case 1:
        DA_packet_pointer = 9;
        ch = 1;
        break;
      case 2:
        DA_packet_pointer = 14;
        ch = 2;
        break;
      case 3:
        DA_packet_pointer = 19;
        ch = 3;
        break;
      case 4:
        DA_packet_pointer = 24;
        ch = 4;
        break;
      case 5:
        DA_packet_pointer = 29;
        ch = 5;
        break;
      case 6:
        DA_packet_pointer = 34;
        ch = 6;
        break;
      case 7:
        DA_packet_pointer = 39;
        ch = 7;
        break;
      default:break;
    }

    x = (int)(da_command_packet[DA_packet_pointer] - 48);
    y = (int)(da_command_packet[DA_packet_pointer + 1] - 48);
    z = (int)(da_command_packet[DA_packet_pointer + 2] - 48);
    t = (int)(da_command_packet[DA_packet_pointer + 3] - 48);


/*
    char test[10];
    int j=6;
    test[0] = '*';
    test[1] = x + '0';
    test[2] = y + '0';
    test[3] = z + '0';
    test[4] = t + '0';
    test[5] = ch + '0';

    while(j<9)
    {
      test[j] = '$';
      j++;
    }
    test[9] = '^';
    pCDC.Write(&pCDC, test, 10);
*/
    /*
    x = data[DO_packet_pointer] - '0';
    y = (int)(data[DO_packet_pointer + 1] - '0');
    z = (int)(data[DO_packet_pointer + 2] - '0');
    t = (int)(data[DO_packet_pointer + 3] - 48);
    */
    data_da = x * 1000 + y * 100 + z * 10 + t;
    dac_write(ch,data_da);
    adc_delay(1000);
  }
}

//#####################################################
//         关于DA输出的函数
// 结束
//######################################################




//#####################################################
//         DI,DO的IO口定义
//
//######################################################
#define INPUT_PA_24      AT91C_PIO_PA24
#define INPUT_PA_25      AT91C_PIO_PA25
#define INPUT_PA_26      AT91C_PIO_PA26
#define INPUT_PA_27      AT91C_PIO_PA27
#define INPUT_PA_28      AT91C_PIO_PA28
#define INPUT_PA_29      AT91C_PIO_PA29
#define INPUT_PA_30      AT91C_PIO_PA30
#define INPUT_PA_31      AT91C_PIO_PA31



#define OUTPUT_PA_2       AT91C_PIO_PA2
#define OUTPUT_PA_15      AT91C_PIO_PA15
#define OUTPUT_PA_16      AT91C_PIO_PA16
#define OUTPUT_PA_17      AT91C_PIO_PA17
#define OUTPUT_PA_18      AT91C_PIO_PA18
#define OUTPUT_PA_19      AT91C_PIO_PA19
#define OUTPUT_PA_20      AT91C_PIO_PA20
#define OUTPUT_PA_23      AT91C_PIO_PA23



//#####################################################
//         关于DI采样的函数
// 开始!!!
//######################################################



void test_di()
{
  unsigned int data,data1,DI_ch;
  char buf_temp;
  int i,n = 0;
  int packet_pointer = 97;
  //char buf[2];

  for(i = 0; i < 8; i++)
  {
    switch (i)
    {
      case 0:
        n=1;
        DI_ch = INPUT_PA_24;
        break;
      case 1:
        n=2;
        DI_ch = INPUT_PA_25;
        break;
      case 2:
        n=3;
        DI_ch = INPUT_PA_26;
        break;
      case 3:
        n=4;
        DI_ch = INPUT_PA_27;
        break;
      case 4:
        n=5;
        DI_ch = INPUT_PA_28;
        break;
      case 5:
        n=6;
        DI_ch = INPUT_PA_29;
        break;
      case 6:
        n=7;
        DI_ch = INPUT_PA_30;
        break;
      case 7:
        n=8;
        DI_ch = INPUT_PA_31;
        break;
      default:break;
    }
    AT91F_PIO_CfgInput(AT91C_BASE_PIOA,DI_ch);
    AT91F_PIO_Enable(AT91C_BASE_PIOA,DI_ch);
    data = AT91F_PIO_GetInput(AT91C_BASE_PIOA);
    data1 = data&(DI_ch);
    buf_temp = (data1 >> (n + 23)) + 48;
    packet[packet_pointer + (i*2)] = '$';
    packet[packet_pointer + (i*2) + 1] = buf_temp;

    /*
    buf[0] = buf_temp;
    buf[1] = 0;
    datalength = 2;
    usart_output(buf);

    datalength =1;
    usart_output("\n");

    Usart_init();
    datalength =2;
    usart_output(buf);
    datalength =1;
    usart_output("\n");
    if(n==8)
    {
      datalength =8;
      usart_output("\n*****\n\n");
      adc_delay(4*ADC_TEST_DELAY/5);
    }
    */
    //adc_delay(100000);
   }

}
//#####################################################
//         关于DI采样的函数
// 结束!!!
//######################################################



//#####################################################
//         关于DO输出的函数
// 开始!!!
//######################################################
void test_do(unsigned char do_command_packet[])
{
  int data_do;
  int i,DO_packet_pointer = 4;
  unsigned int DO_ch;


  for(i = 0;i < 8;i++)
  {
    switch(i)
    {
      case 0:
        DO_packet_pointer = 4;
        DO_ch = OUTPUT_PA_2;
        break;
      case 1:
        DO_packet_pointer = 6;
        DO_ch = OUTPUT_PA_15;
        break;
      case 2:
        DO_packet_pointer = 8;
        DO_ch = OUTPUT_PA_16;
        break;
      case 3:
        DO_packet_pointer = 10;
        DO_ch = OUTPUT_PA_17;
        break;
      case 4:
        DO_packet_pointer = 12;
        DO_ch = OUTPUT_PA_18;
        break;
      case 5:
        DO_packet_pointer = 14;
        DO_ch = OUTPUT_PA_19;
        break;
      case 6:
        DO_packet_pointer = 16;
        DO_ch = OUTPUT_PA_20;
        break;
      case 7:
        DO_packet_pointer = 18;
        DO_ch = OUTPUT_PA_23;
        break;
      default:break;
    }

    data_do = do_command_packet[DO_packet_pointer] - '0';

    AT91F_PIO_GetCfgPullup(AT91C_BASE_PIOA);

    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,DO_ch);
    AT91F_PIO_Enable(AT91C_BASE_PIOA,DO_ch);

    if(data_do == 0)
    {
      AT91F_PIO_SetOutput(AT91C_BASE_PIOA,DO_ch);
    }
    else if(data_do == 1)
    {
      AT91F_PIO_SetOutput(AT91C_BASE_PIOA,DO_ch);
      AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,DO_ch);

      //AT91F_PIO_SetOutput(AT91C_BASE_PIOA,DO_ch);
    }

    //adc_delay(1000);//选择延时

  }
}
//#####################################################
//         关于DO输出的函数
// 结束!!!
//######################################################

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -