?? dac.c
字號:
#include "stdio.h"
#include "addr.h"
#include "conv_da.c"
/*定義32路I/O端口 */
volatile ioport u16 port0020;
volatile ioport u16 port0021;
volatile ioport u16 port0022;
volatile ioport u16 port0023;
volatile ioport u16 port0024;
volatile ioport u16 port0025;
volatile ioport u16 port0026;
volatile ioport u16 port0027;
volatile ioport u16 port0048;
volatile ioport u16 port0049;
volatile ioport u16 port004A;
volatile ioport u16 port004B;
volatile ioport u16 port004C;
volatile ioport u16 port004D;
volatile ioport u16 port004E;
volatile ioport u16 port004F;
volatile ioport u16 port0050;
volatile ioport u16 port0051;
volatile ioport u16 port0052;
volatile ioport u16 port0053;
volatile ioport u16 port0054;
volatile ioport u16 port0055;
volatile ioport u16 port0056;
volatile ioport u16 port0057;
volatile ioport u16 port0058;
volatile ioport u16 port0059;
volatile ioport u16 port005A;
volatile ioport u16 port005B;
volatile ioport u16 port005C;
volatile ioport u16 port005D;
volatile ioport u16 port005E;
volatile ioport u16 port005F;
volatile ioport u16 port00FC;
/*聲明32路通道的DA轉換函數*/
extern void conv_da1(void);
extern void conv_da2(void);
extern void conv_da3(void);
extern void conv_da4(void);
extern void conv_da5(void);
extern void conv_da6(void);
extern void conv_da7(void);
extern void conv_da8(void);
extern void conv_da9(void);
extern void conv_da10(void);
extern void conv_da11(void);
extern void conv_da12(void);
extern void conv_da13(void);
extern void conv_da14(void);
extern void conv_da15(void);
extern void conv_da16(void);
extern void conv_da17(void);
extern void conv_da18(void);
extern void conv_da19(void);
extern void conv_da20(void);
extern void conv_da21(void);
extern void conv_da22(void);
extern void conv_da23(void);
extern void conv_da24(void);
extern void conv_da25(void);
extern void conv_da26(void);
extern void conv_da27(void);
extern void conv_da29(void);
extern void conv_da30(void);
extern void conv_da31(void);
extern void conv_da32(void);
/*聲明單、雙極性通道的校準函數*/
extern u16 da_adjust1();
extern u16 da_adjust2();
/*申明停止D/A操作的函數*/
extern void stop_da(void);
/*開始D/A操作*/
void da_convert()
{
u16 channel_num; //通道地址
u16 real_parameter; //未經過校準的數據值,校準函數da_adjust的實參
u16 sixth_bit; //判斷re_selc_addr第6位的變量
u16 data_regulate; //校準過的數據值
asm(" STM #0001h,SWCR "); //*SWWSR=0x7fff; //設置14個等待
real_parameter=*(volatile u16 *)re_data_addr; //把讀到的數據給da_adjust的實參
sixth_bit=*(volatile u16 *)re_selc_addr && 0x0020;//先用第6位來判斷是否停止D/A工作
if(sixth_bit==0x0020) {port00FC=0x0000;} //如果第6位為1,則停止D/A
else //判斷通道
{
channel_num =*(volatile u16 *)re_selc_addr && 0x001F; //求低5位
switch(channel_num)
{
case 0: data_regulate=da_adjust1(real_parameter);//單極性8路
port0020=data_regulate; break;
case 1: data_regulate=da_adjust1(real_parameter);
port0021=data_regulate; break;
case 2: data_regulate=da_adjust1(real_parameter);
port0022=data_regulate; break;
case 3: data_regulate=da_adjust1(real_parameter);
port0023=data_regulate; break;
case 4: data_regulate=da_adjust1(real_parameter);
port0024=data_regulate; break;
case 5: data_regulate=da_adjust1(real_parameter);
port0025=data_regulate; break;
case 6: data_regulate=da_adjust1(real_parameter);
port0026=data_regulate; break;
case 7: data_regulate=da_adjust1(real_parameter);
port0027=data_regulate; break;
case 8: data_regulate=da_adjust1(real_parameter);//雙極性帶隔離3路
port0048=data_regulate; break;
case 9: data_regulate=da_adjust2(real_parameter);
port0049=data_regulate; break;
case 10: data_regulate=da_adjust2(real_parameter);
port004A=data_regulate; break;
case 11: data_regulate=da_adjust2(real_parameter);//雙極性21路
port004B=data_regulate; break;
case 12: data_regulate=da_adjust2(real_parameter);
port004C=data_regulate; break;
case 13: data_regulate=da_adjust2(real_parameter);
port004D=data_regulate; break;
case 14: data_regulate=da_adjust2(real_parameter);
port004E=data_regulate; break;
case 15: data_regulate=da_adjust2(real_parameter);
port004F=data_regulate; break;
case 16: data_regulate=da_adjust2(real_parameter);
port0050=data_regulate; break;
case 17: data_regulate=da_adjust2(real_parameter);
port0051=data_regulate; break;
case 18: data_regulate=da_adjust2(real_parameter);
port0052=data_regulate; break;
case 19: data_regulate=da_adjust2(real_parameter);
port0053=data_regulate; break;
case 20: data_regulate=da_adjust2(real_parameter);
port0054=data_regulate; break;
case 21: data_regulate=da_adjust2(real_parameter);
port0055=data_regulate; break;
case 22: data_regulate=da_adjust2(real_parameter);
port0056=data_regulate; break;
case 23: data_regulate=da_adjust2(real_parameter);
port0057=data_regulate; break;
case 24: data_regulate=da_adjust2(real_parameter);
port0058=data_regulate; break;
case 25: data_regulate=da_adjust2(real_parameter);
port0059=data_regulate; break;
case 26: data_regulate=da_adjust2(real_parameter);
port005A=data_regulate; break;
case 27: data_regulate=da_adjust2(real_parameter);
port005B=data_regulate; break;
case 28: data_regulate=da_adjust2(real_parameter);
port005C=data_regulate; break;
case 29: data_regulate=da_adjust2(real_parameter);
port005D=data_regulate; break;
case 30: data_regulate=da_adjust2(real_parameter);
port005E=data_regulate; break;
case 31: data_regulate=da_adjust2(real_parameter);
port005F=data_regulate; break;
default: *(volatile u16 *)tr_ctr_addr=0x0002;
*(volatile u16 *)tr_selc_addr=0xffff; //給0xffff表示地址出錯
goto L1;
}
}
/***把信息回寫給dsp***/
*(volatile u16 *)tr_ctr_addr=0x0002;
*(volatile u16 *)tr_selc_addr=*(volatile u16 *)re_selc_addr;
L1: *(volatile u16 *)tr_dadata_addr=real_parameter;
/*********************/
asm(" STM #0000h,SWCR "); //復位SWCR
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -