// **********DAC8043.c // Interface between MC68HC812 and DAC8043 12-bit DAC // Uses SPI (for solution without SPI see DAB8043.c) // Last modified 4/10/02 by Jonathan W. Valvano // Copyright 2002 by Jonathan W. Valvano, valvano@uts.cc.utexas.edu // You may use, edit, run or distribute this file // as long as the above copyright notice remains //******** DAC8043_Init *************** // Initialize SPI-DAC8043 interface // make PS7,PS6,PS5 outputs, // SPI master data in, PS4, is not used void DAC8043_Init(void){ // PS7=LD=1 DDRS = 0xE0; // PS6=CLK=SPI clock out PORTS = 0x80; // PS5=SRI=SPI master data out /* bit SP0CR1 7 SPIE = 0 no interrupts 6 SPE = 1 enable SPI 5 SWOM = 0 regular outputs 4 MSTR = 1 master 3 CPOL = 0 output changes on fall, clock normally low 2 CPHA = 0 and input clocked in on rise 1 SSOE = 0 PS7 regular output DAC8043 LD 0 LSBF = 0 most significant bit first */ SP0CR1 = 0x50; /* bit SP0CR2 3 PUPS = 0 no internal pullups 2 RDS = 0 regular drive 0 SPC0 = 0 normal mode */ SP0CR2 = 0x00; SP0BR = 0x01; // 2 MHz } #define SPIF 0x80 //******** DAC8043_Out *************** // Output 12-bit code to DAC8043 // 0<=code<=4095 // uses SPI port void DAC8043_Out(unsigned short code){ unsigned char dummy; SP0DR = code>>8; // msbyte while((SP0SR&SPIF)==0); // gadfly wait for SPIF dummy = SP0DR; // clear SPIF SP0DR = code; // lsbyte while((SP0SR&SPIF)==0); // gadfly wait for SPIF dummy = SP0DR; // clear SPIF PORTS &= ~0x80; // PS7=LD=0 PORTS |= 0x80; // PS7=LD=1 }