/***************************************************************************** * Filename: wave.c * * Author: Marco Ziglioli (Doctor Stein) * * Date: 12/06/2001 * * Description: Little test program for Analog Output section of PCI6025E * *----------------------------------------------------------------------------* * Notes: Connect an oscilloscope to DACs output pins (20 & 21) and * * watch the waveforms. * * and decrise voltage * *****************************************************************************/ #include #include #include #include #define MAX_VAL 500 #define WAVE_PERIOD 1000 #define WAVE_WCET 200 #define GRAPH_PERIOD 1000 #define GRAPH_WCET 550 #define TASK_GROUP 1 #define DAC0_CONV 0.1 #define DAC1_CONV 0.05 #define INC 40 void createWaves(void); void drawInterface(void); void endfun(KEY_EVT *); void close_event(void *); TASK wave_body(int); TASK video_body(int); WORD wave0[MAX_VAL], wave1[MAX_VAL]; int black = rgb16(0,0,0), white = rgb16(255, 255, 255); BYTE sys = 0; int main(int argc, char **argv) { KEY_EVT k; HARD_TASK_MODEL wave0, wave1; HARD_TASK_MODEL video; PID wave0_pid, wave1_pid, video_pid; int modenum; k.flag = CNTR_BIT; k.scan = KEY_X; k.ascii = 'x'; keyb_hook(k, endfun); k.flag = CNTL_BIT; keyb_hook(k, endfun); sys_atrunlevel(close_event, NULL, RUNLEVEL_BEFORE_EXIT); hard_task_default_model(wave0); hard_task_def_wcet(wave0, WAVE_WCET); hard_task_def_mit(wave0, WAVE_PERIOD); hard_task_def_arg(wave0, 0); hard_task_def_group(wave0, TASK_GROUP); if( (wave0_pid = task_create("Wave 0", wave_body, &wave0, NULL)) == NIL ){ sys = 10; sys_end(); } hard_task_default_model(wave1); hard_task_def_wcet(wave1, WAVE_WCET); hard_task_def_mit(wave1, WAVE_PERIOD); hard_task_def_arg(wave1, 1); hard_task_def_group(wave1, TASK_GROUP); if( (wave1_pid = task_create("Wave 1", wave_body, &wave1, NULL)) == NIL ){ sys = 11; sys_end(); } hard_task_default_model(video); hard_task_def_wcet(video, GRAPH_WCET); hard_task_def_mit(video, GRAPH_PERIOD); hard_task_def_group(video, TASK_GROUP); if( (video_pid = task_create("Video task", video_body, &video, NULL)) == NIL ){ sys = 12; sys_end(); } if(pci_init() == -1){ sys = 20; sys_end(); } if(!reMap()){ sys = 21; sys_end(); } if(grx_init() == -1){ sys = 30; sys_end(); } if( (modenum = grx_getmode(800, 600, 16)) == -1 ){ sys = 31; sys_end(); } grx_setmode(modenum); createWaves(); drawInterface(); //Analog output section set up DAC_Init(); /* *AI_TIMEBASE div by 2; OUT_TIMEBASE div by 2; single DAC mode *TMRDACWR = 3 OUT_TIMEBASE period; FIFO flags polarity active low *TMRDACWR disabled; DMA PIO control = FIFO DATA interface mode *UPDATE signal timebase = AO_UPDATE pulse width *UPDATE pulsewidth = 3-3.5 OUT_TIMEBASE period *UPDATE signal polarity = HIGH Z */ DAC_boardInit(0x02, 0x4000); /* *LDAC0 source = UPDATE *DAC0 update immediately *LDAC1 source = UPDATE *DAC1 update immediately */ DAC_LDACSourceUpdate(0x00); //End of Analog output section setup group_activate(TASK_GROUP); } void endfun(KEY_EVT *k) { sys_end(); } void close_event(void *arg) { grx_close(); switch(sys){ case 0: cprintf("Regular End!\n"); break; case 10: cprintf("Cannot create task!\n"); break; case 11: cprintf("Cannot create task!\n"); break; case 12: cprintf("Cannot create