📄 signal_process.c
字号:
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 + -