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

📄 librtd-dm6430.c

📁 rt 6430 采集卡 linux下驱动源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
}intClearIRQ16430(int descriptor) {    return ClearRegister6430(descriptor, DM6430_CL_IRQ2);}intInitBoard6430(int descriptor) {    if (ClearBoard6430(descriptor) == -1) {	return -1;    }    if (ClearADDMADone6430(descriptor) == -1) {	return -1;    }    if (ClearChannelGainTable6430(descriptor) == -1) {	return -1;    }    return ClearADFIFO6430(descriptor);}intEnableIRQ6430(int descriptor, enum DM6430HR_INT IRQChannel) {    struct DM6430HR_IE	io_request = {IRQChannel, 1};    return ioctl(descriptor, DM6430HR_IOCTL_IRQ_ENABLE, &io_request);}intDisableIRQ6430(int descriptor, enum DM6430HR_INT IRQChannel) {    struct DM6430HR_IE	io_request = {IRQChannel, 0};    return ioctl(descriptor, DM6430HR_IOCTL_IRQ_ENABLE, &io_request);}intGetIRQCounter6430(    int descriptor,    enum DM6430HR_INT IRQChannel,    unsigned long *counter_value_p) {    int			status;    struct DM6430HR_GIC	io_request = {IRQChannel, 0};    status = ioctl(descriptor, DM6430HR_IOCTL_GET_IRQ_COUNTER, &io_request);    if (status != -1) {	*counter_value_p = io_request.counter;    }    return status;}intInstallDMA6430(int descriptor, enum DM6430HR_DMA DMAChannel) {    struct DM6430HR_DI	io_request = {DMAChannel, 1};    return ioctl(descriptor, DM6430HR_IOCTL_DMA_INSTALL, &io_request);}intDeInstallDMA6430(int descriptor, enum DM6430HR_DMA DMAChannel) {    struct DM6430HR_DI	io_request = {DMAChannel, 0};    return ioctl(descriptor, DM6430HR_IOCTL_DMA_INSTALL, &io_request);}intGetDmaData6430(    int descriptor,    void *dma_buffer_p,    enum DM6430HR_DMA DMAChannel,    size_t length,    size_t offset,    size_t *bytes_transferred_p) {    int			status;    struct DM6430HR_GDD	io_request =	{DMAChannel, dma_buffer_p, length, offset};    status = ioctl(descriptor, DM6430HR_IOCTL_DMA_GETDATA, &io_request);    if (status != -1) {	*bytes_transferred_p = io_request.length;    }    return status;}intStartDMA6430(    int descriptor,    enum DM6430HR_DMA DMAChannel,    size_t TransferBytes) {    struct DM6430HR_DST	io_request = {DMAChannel, TransferBytes};    return ioctl(descriptor, DM6430HR_IOCTL_DMA_START, &io_request);}intStopDMA6430(int descriptor, enum DM6430HR_DMA DMAChannel) {    return ioctl(descriptor, DM6430HR_IOCTL_DMA_STOP, DMAChannel);}intGetAutoincData6430(    int descriptor,    enum DM6430HR_STR_Regs from_register,    enum DM6430HR_STR_TYPE type,    void *buffer_p,    size_t element_num) {    struct DM6430HR_GID	io_request =	{from_register, type, buffer_p, element_num};    return ioctl(descriptor, DM6430HR_IOCTL_DMA_GETINC, &io_request);}intReadStatus6430(int descriptor, u_int16_t *status_p) {    return inw6430(descriptor, r_STATUS_6430, status_p);}intIsADFIFOEmpty6430(int descriptor, int *ad_fifo_empty_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_fifo_empty_p = !(status_register & 0x0001);    }    return status;}intIsADFIFOFull6430(int descriptor, int *ad_fifo_full_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_fifo_full_p = !(status_register & 0x0002);    }    return status;}intIsADHalted6430(int descriptor, int *ad_halted_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_halted_p = (status_register & 0x0004);    }    return status;}intIsADConverting6430(int descriptor, int *ad_converting_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_converting_p = !(status_register & 0x0008);    }    return status;} intIsADDMADone6430(int descriptor, int *ad_dma_done_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_dma_done_p = (status_register & 0x0010);    }    return status;} intIsFirstADDMADone6430(int descriptor, int *ad_first_dma_done_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_first_dma_done_p = (status_register & 0x0020);    }    return status;} intIsBurstClockOn6430(int descriptor, int *ad_burst_clock_on_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_burst_clock_on_p = (status_register & 0x0040);    }    return status;} intIsPacerClockOn6430(int descriptor, int *ad_pacer_clock_on_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_pacer_clock_on_p = (status_register & 0x0080);    }    return status;}intIsAboutTrigger6430(int descriptor, int *ad_about_trigger_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*ad_about_trigger_p = (status_register & 0x0100);    }    return status;}intIsDigitalIRQ6430(int descriptor, int *digital_interrupt_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*digital_interrupt_p = (status_register & 0x0200);    }    return status;}intIsDINFIFOEmpty6430(int descriptor, int *digital_fifo_empty_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*digital_fifo_empty_p = !(status_register & 0x0400);    }    return status;}intIsDINFIFOHalf6430(int descriptor, int *digital_fifo_half_full_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*digital_fifo_half_full_p = !(status_register & 0x0800);    }    return status;}intIsDINFIFOFull6430(int descriptor, int *digital_fifo_full_p) {    int		status;    u_int16_t	status_register;    status = ReadStatus6430(descriptor, &status_register);    if (status != -1) {	*digital_fifo_full_p = !(status_register & 0x1000);    }    return status;}intLoadControlRegister6430(int descriptor, u_int16_t value) {    return outw6430(descriptor, r_CONTROL_6430, value);}intEnableTables6430(    int descriptor,    int Enable_AD_Table,    int Enable_Digital_Table) {    u_int16_t		enable_mask = 0x0000;    /*     * Cannot enable digital table without enabling A/D table     */    if ((Enable_AD_Table == 0) && (Enable_Digital_Table != 0)) {	errno = EOPNOTSUPP;	return -1;    }    if (Enable_AD_Table != 0) {	enable_mask |= (1 << 2);    }    if (Enable_Digital_Table != 0) {	enable_mask |= (1 << 3);    }    return moutw6430(descriptor, r_CONTROL_6430, 0xFFF3, enable_mask);}intChannelGainDataStore6430(int descriptor, int Enable) {    u_int16_t	enable_mask = 0x0000;    if (Enable != 0) {	enable_mask |= (1 << 4);    }    return moutw6430(descriptor, r_CONTROL_6430, 0xFFEF, enable_mask);}intSelectTimerCounter6430(int descriptor, enum DM6430HR_CLK_SEL Select) {    if (validate_clock_select(Select) == -1) {	return -1;    }    return moutw6430(descriptor, r_CONTROL_6430, 0xFF9F, Select << 5);}intSetSampleCounterStop6430(int descriptor, int Disable) {    u_int16_t	disable_mask = 0x0000;    if (Disable != 0) {	disable_mask |= (1 << 7);    }    return moutw6430(descriptor, r_CONTROL_6430, 0xFF7F, disable_mask);}intSetPauseEnable6430(int descriptor, int Enable) {    u_int16_t	enable_mask = 0x0000;    if (Enable != 0) {	enable_mask |= (1 << 8);    }    return moutw6430(descriptor, r_CONTROL_6430, 0xFEFF, enable_mask);}intReadADData6430(int descriptor, int16_t *ad_data_p) {    int		status;    u_int16_t	ad_data;    status = inw6430(descriptor, r_AD_6430, &ad_data);    if (status != -1) {	*ad_data_p = (int16_t) ad_data;    }    return status;}intReadChannelGainDataStore6430(int descriptor, u_int16_t *cgds_data_p) {    return inw6430(descriptor, r_AD_6430, cgds_data_p);}intSetChannelGain6430(    int descriptor,    enum DM6430HR_AIN Channel,    enum DM6430HR_GAIN Gain,    enum DM6430HR_SE Se_Diff) {    switch (Channel) {	case DM6430HR_AIN1:	case DM6430HR_AIN2:	case DM6430HR_AIN3:	case DM6430HR_AIN4:	case DM6430HR_AIN5:	case DM6430HR_AIN6:	case DM6430HR_AIN7:	case DM6430HR_AIN8:	case DM6430HR_AIN9:	case DM6430HR_AIN10:	case DM6430HR_AIN11:	case DM6430HR_AIN12:	case DM6430HR_AIN13:	case DM6430HR_AIN14:	case DM6430HR_AIN15:	case DM6430HR_AIN16:	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    switch (Gain) {	case DM6430HR_GAINx1:	case DM6430HR_GAINx2:	case DM6430HR_GAINx4:	case DM6430HR_GAINx8:	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    switch (Se_Diff) {	case DM6430HR_SE_SE:	case DM6430HR_SE_DIFF:	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    return outw6430(	descriptor,	r_CHANNEL_GAIN_6430,	((Channel & 0xF) | ((Gain & 0x7) << 4) | ((Se_Diff & 1) << 9))    );}intLoadADTable6430(int descriptor, u_int16_t ADEntries, ADTableRow *ADTable_p) {    int	entry_num;    int	status;    if ((ADEntries == 0) || (ADEntries > 1024)) {	errno = EINVAL;	return -1;    }    if (moutw6430(descriptor, r_CONTROL_6430, 0xFFFC, 0x1) == -1) {	return -1;    }    for (entry_num = 0; entry_num < ADEntries; entry_num++) {	u_int16_t	ADEntry;	ADEntry = (	    (ADTable_p[entry_num].Channel & 0xF)	    |	    ((ADTable_p[entry_num].Gain & 0x7) << 4)	    |	    ((ADTable_p[entry_num].Se_Diff & 1) << 9)	    |	    ((ADTable_p[entry_num].Pause & 1) << 10)	    |	    ((ADTable_p[entry_num].Skip & 1) << 11)	);	status = outw6430(descriptor, r_AD_TABLE_6430, ADEntry);	if (status == -1) {	    (void) moutw6430(descriptor, r_CONTROL_6430, 0xFFFC, 0x0);	    return -1;	}    }     return moutw6430(descriptor, r_CONTROL_6430, 0xFFFC, 0x0);}intLoadDigitalTable6430(int descriptor, u_int16_t entries, u_int16_t *table_p) {    int	entry_num;    int	status;    if ((entries == 0) || (entries > 1024)) {	errno = EINVAL;	return -1;    }    if (moutw6430(descriptor, r_CONTROL_6430, 0xFFFC, 0x2) == -1) {	return -1;    }    for (entry_num = 0; entry_num < entries; entry_num++) {	status = outw6430(descriptor, r_DIGITAL_TABLE_6430, table_p[entry_num]);	if (status == -1) {	    (void) moutw6430(descriptor, r_CONTROL_6430, 0xFFFC, 0x0);	    return -1;	}    }    return moutw6430(descriptor, r_CONTROL_6430, 0xFFFC, 0x0);}intStartConversion6430(int descriptor) {    u_int16_t	dummy;    return inw6430(descriptor, r_START_CONVERSION_6430, &dummy);}intLoadTriggerRegister6430(int descriptor, u_int16_t value) {    return outw6430(descriptor, r_TRIGGER_6430, value);}intSetConversionSelect6430(int descriptor, enum DM6430HR_CONV Select) {    switch (Select) {	case DM6430HR_CONV_SOFT_TRIGGER:	case DM6430HR_CONV_PACER_CLOCK:	case DM6430HR_CONV_BURST_CLOCK:	case DM6430HR_CONV_DIGITAL_INT:	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    return moutw6430(descriptor, r_TRIGGER_6430, 0xFFFC, Select);}intSetStartTrigger6430(int descriptor, enum DM6430HR_START_TRIG Start_Trigger) {    switch (Start_Trigger) {	case DM6430HR_START_TRIG_SOFTWARE:	case DM6430HR_START_TRIG_EXTERNAL:	case DM6430HR_START_TRIG_DIGITAL_INT:	case DM6430HR_START_TRIG_USER_TC1:	case DM6430HR_START_TRIG_GATE:	    break;	case DM6430HR_START_TRIG_RES1:	case DM6430HR_START_TRIG_RES2:	case DM6430HR_START_TRIG_RES3:	    errno = EOPNOTSUPP;	    return -1;	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    return moutw6430(descriptor, r_TRIGGER_6430, 0xFFE3, Start_Trigger << 2);}intSetStopTrigger6430(int descriptor, enum DM6430HR_STOP_TRIG Stop_Trigger) {    switch (Stop_Trigger) {	case DM6430HR_STOP_TRIG_SOFTWARE:	case DM6430HR_STOP_TRIG_EXTERNAL:	case DM6430HR_STOP_TRIG_DIGITAL_INT:	case DM6430HR_STOP_TRIG_SAMPLE_CNT:	case DM6430HR_STOP_TRIG_ABOUT_SOFTWARE:	case DM6430HR_STOP_TRIG_ABOUT_EXTERNAL:	case DM6430HR_STOP_TRIG_ABOUT_DIGITAL:	case DM6430HR_STOP_TRIG_ABOUT_USER_TC1:	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    return moutw6430(descriptor, r_TRIGGER_6430, 0xFF1F, Stop_Trigger << 5);}intSetPacerClockSource6430(int descriptor, enum DM6430HR_PACER_CLK Source) {    switch (Source) {	case DM6430HR_PACER_CLK_INTERNAL:	case DM6430HR_PACER_CLK_EXTERNAL:	    break;	default:	    errno = EINVAL;	    return -1;	    break;    }    return moutw6430(descriptor, r_TRIGGER_6430, 0xFDFF, Source << 9);}intSetBurstTrigger6430(int descriptor, enum DM6430HR_BURST_TRIG Burst_Trigger) {    switch (Burst_Trigger) {	case DM6430HR_BURST_TRIG_SOFTWARE:	case DM6430HR_BURST_TRIG_PACER:	case DM6430HR_BURST_TRIG_EXTERNAL:	case DM6430HR_BURST_TRIG_DIGITAL:	    break;	default:	    errno = EINVAL;	    return -1;

⌨️ 快捷键说明

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