📄 main1.c
字号:
/* adc_1: main.c */
/* for the comunication of the MCU and DSP*/
#include "adc.h"
#include "port.h"
#include "sci.h"
#include "gpio.h"
#include "bsp.h"
#include "timer.h"
#include "dspfunc.h"
#include "fcntl.h"
#include "arch.h"
#include "pcmasterdrv.h"
#include "spi.h"
/*******************************************************
* Skeleton C main program for use with Embedded SDK
*******************************************************/
void CC_CallBack1(adc_eCallbackType type, adc_tSampleMask causedSampleMask );
static void transhow( float);
static void Timer1ISR();
static void Initialize();
/******************************************************************************/
spi_sParams SpiParams;
int SerialMaster;
UWord16 Data0=0x01;
UWord16 Data1=0xD0;
UWord16 Data2=0x00;
UWord16 Data3=0x00;
int PortE;
bool b=0;
int AdcFD;
int NumberRead;
float ResultAdc=0;
float ResultAdc_show=0,ResultAdc_show1=0,ResultAdc_show2=0;
int a=0;
float ResultAdc_[10]={0,0,0,0,0,0,0,0,0,0};
Frac16 ReadValue;
bool bSatMad;
static const adc_sState sAdc0={
ADC_CHANNEL_0,
1, /* NumSamplesPerScan = */
0, /* OffsetRegister = */
0, /* LowLimitRegister = */
0x7ff8, /* HighLimitRegister = */
ADC_ZC_DISABLE, /* ZeroCross = */
};
/***************************************************************************************************/
void main (void)
{
Initialize();
while(1)
{
adcIoctl(AdcFD,ADC_START,0,BSP_DEVICE_NAME_ADC_0);
asm(nop);
}
}
static void Timer1ISR()
{
if(a==10)
{
ResultAdc_show1=(ResultAdc_[0]+ResultAdc_[1]+ResultAdc_[2]+ResultAdc_[3]+ResultAdc_[4]+ResultAdc_[5]+ResultAdc_[6]+ResultAdc_[7]+ResultAdc_[8]+ResultAdc_[9])/10;
ResultAdc_show2= ResultAdc_show1/32768*3.3; //此句可删可留,留则显示电压值,删则显示所读寄存器的值
transhow(ResultAdc_show2);
a=0;
}
ResultAdc_[a]= ResultAdc;
a++;
}
static void transhow( float f1)
{
bool bSatMode;
UWord16 Data0=0x01;
UWord16 Data1=0xD0;
UWord16 Data2=0x00;
UWord16 Data3=0x00;
int k1, k2, k3, k4, k5;
float t1,t2,t3;
if ( ( f1 >= 1e-6 )&& ( f1 < 10 ))
{
k1 = (int)f1;
t1 = (f1 - k1)*10;
k2 = (int)t1;
t2 = (t1 - k2)*10 ;
k3 = (int)t2;
t3 = (t2-k3)*10;
k4 = (int)t3;
k5 = (t3-k4)*10;
k2 = k2*16;
k4 = k4*16;
Data1 = 0xD0; // this can place the dot after the Bank5 ,eg: 1.2087
Data1 = Data1 +k1;
Data2 = Data2 + k2 +k3 ;
Data3 = Data3 +k4 +k5;
}
else if ( ( f1 >= 10.0 ) && ( f1 <= 99.999 ))
{
t1 = (int)f1;
k1 = (int)(f1/10);
k2 = t1-k1*10;
t2 = (f1-t1)*10;
k3 = (int)t2;
t3 = t2*10-k3*10;
k4 = (int)t3;
k5 = (t3-k4)*10;
k2 = k2*16;
k4 = k4*16;
Data1 = 0xC0; // this can place the dot after the Bank4 ,eg: 12.087
Data1 = Data1 +k1;
Data2 = Data2 + k2 +k3 ;
Data3 = Data3 +k4 +k5;
}
else if ( ( f1 >= 100.00 ) && ( f1 <= 999.99 ))
{
t1 = (int)f1;
k1 = (int)(f1/100);
k2 = (int)((t1-k1*100)/10);
k3 = t1-k1*100-k2*10;
t3 = f1-t1;
bSatMode = archGetSetSaturationMode(false);
k4 = (int)(t3*10);
archGetSetSaturationMode(bSatMode);
k5 = t3*100-k4*10;
k2 = k2*16;
k4 = k4*16;
Data1 = 0xB0; // this can place the dot after the Bank5 ,eg: 120.87
Data1 = Data1 +k1;
Data2 = Data2 + k2 +k3 ;
Data3 = Data3 +k4 +k5;
}
else if ( ( f1 >= 1000.0 ) && ( f1 <= 9999.0))
{
t1 = (int)f1;
k1 = (int)(f1/1000);
k2 = (int)((t1-k1*1000)/100);
k3 =(int) ((t1-k1*1000-k2*100)/10);
k4 = t1-k1*1000-k2*100-k3*10;
k5 = (f1-t1)*10;
k2 = k2*16;
k4 = k4*16;
Data1 = 0xA0; // this can place the dot after the Bank5 ,eg: 1208.7
Data1 = Data1 +k1;
Data2 = Data2 + k2 +k3 ;
Data3 = Data3 +k4 +k5;
}
else
{
k1 = (int)(f1/10000);
k2 = (int)(f1/1000-k1*10);
k3 = (int)(f1/100-k1*100-k2*10);
k4 = (int)(f1/10-k1*1000-k2*100-k3*10);
k5 = f1-k1*10000-k2*1000-k3*100-k4*10;
k2 = k2*16;
k4 = k4*16;
Data1 = 0x80; // this can place the dot after the Bank5 ,eg: 1208.7
Data1 = Data1 +k1;
Data2 = Data2 + k2 +k3 ;
Data3 = Data3 +k4 +k5;
}
gpioIoctl(PortE, GPIO_CLEAR, gpioPin(E, 6), BSP_DEVICE_NAME_GPIO_E);
write(SerialMaster,(UWord16 * )(&Data0),sizeof(Data0));
gpioIoctl(PortE, GPIO_SET, gpioPin(E, 6), BSP_DEVICE_NAME_GPIO_E);
gpioIoctl(PortE, GPIO_CLEAR, gpioPin(E, 6),BSP_DEVICE_NAME_GPIO_E);
write(SerialMaster,(UWord16 * )(&Data1),sizeof(Data1));
write(SerialMaster,(UWord16 * )(&Data2),sizeof(Data2));
write(SerialMaster,(UWord16 * )(&Data3),sizeof(Data3));
gpioIoctl(PortE, GPIO_SET , gpioPin(E, 6), BSP_DEVICE_NAME_GPIO_E);
}
void CC_CallBack1(adc_eCallbackType type, adc_tSampleMask causedSampleMask )
{
NumberRead=adcRead(AdcFD,&ReadValue,sizeof(ReadValue));
bSatMad = archGetSetSaturationMode( false);
ResultAdc = (float)ReadValue;
archGetSetSaturationMode(bSatMad);
}
static void Initialize()
{
struct sigevent Timer1Event;
timer_t Timer1;
struct itimerspec Timer1Settings;
SpiParams.pSlaveSelect = NULL; /* Set up SPI device */
SpiParams.pSlaveDeselect = NULL;
SpiParams.bSetAsMaster = 1;
SpiParams.TransmissionSize = 0x0007;
SerialMaster = open(BSP_DEVICE_NAME_SPI_0, 0, &SpiParams);
ioctl(SerialMaster,SPI_DATA_SHIFT_MSB_FIRST ,NULL);
ioctl(SerialMaster,SPI_BAUDRATE_DIVIDER_16,NULL);
PortE = gpioOpen(BSP_DEVICE_NAME_GPIO_E,0);
ioctl(PortE, GPIO_SETAS_GPIO, gpioPin(E,6));
ioctl(PortE, GPIO_SETAS_OUTPUT, gpioPin(E,6));
gpioIoctl(PortE, GPIO_SET , gpioPin(E, 6), BSP_DEVICE_NAME_GPIO_E);
Timer1Event.sigev_notify_function = Timer1ISR;
timer_create(CLOCK_AUX1, &Timer1Event, &Timer1);
Timer1Settings.it_interval.tv_sec = 0; /* s */
Timer1Settings.it_interval.tv_nsec =50000000; /* ns */
Timer1Settings.it_value.tv_sec = 0;
Timer1Settings.it_value.tv_nsec =50000000; //50ms
timer_settime(Timer1, 0, &Timer1Settings, NULL);
AdcFD=adcOpen(BSP_DEVICE_NAME_ADC_0, 0,(adc_sState *)&sAdc0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -