/* *************************************
注意开SPI的时钟!!!!
2011年10月29日9:44:52
DA芯片是TLV5620,数据线和时钟都是用SPI的,LOAD线用GPIOA15来控制!
******************************************
*/
#include "DSP28_Device.h"
void Gpio_select(void);
void spi_init(void);
void dac_load(char channel,int value);
interrupt void cpu_timer0_isr(void);
void main(void)
{
Uint16 voltage = 0;
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000; //清中断
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
*/
InitPieVectTable();
Gpio_select();
spi_init();
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
InitCpuTimers();
ConfigCpuTimer(&CpuTimer0,120,1000);
PieCtrl.PIEIER1.bit.INTx7 = 1;
IER |= M_INT1;
EINT;
ERTM;
CpuTimer0Regs.TCR.bit.TSS = 0;
for(;;)
{
while(CpuTimer0.InterruptCount < 3 );
CpuTimer0.InterruptCount = 0;
dac_load(0,voltage);
if( voltage ++ > 255)
voltage = 0;
}
}
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPFMUX.bit.SPICLKA_GPIOF2 = 1;
GpioMuxRegs.GPFMUX.bit.SPISIMOA_GPIOF0 = 1;
GpioMuxRegs.GPADIR.bit.GPIOA15 = 1;
GpioDataRegs.GPASET.bit.GPIOA15 = 1;
EDIS;
}
void spi_init(void)
{
SpiaRegs.SPICCR.all = 0x0000; //spi sw reset = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 1; //设置clock phase,输出早于输入SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.TALK = 1;
SpiaRegs.SPIBRR = 0x001d; //30M / (29 + 1) = 1MHZ
SpiaRegs.SPICCR.all = 0x00ca; // spi sw reset = 1;clock polarity = 1; }
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount ++;
PieCtrl.PIEACK.all = PIEACK_GROUP1;
}
void dac_load(char channel,int value)
{
SpiaRegs.SPICCR.bit.RESET = 1; //准备发送
SpiaRegs.SPITXBUF = value << 5; //因为是11位数据,要保证左对齐需左移5位while(SpiaRegs.SPISTS.bit.INT_FLAG == 0);
SpiaRegs.SPICCR.bit.RESET = 0; //清标志
GpioDataRegs.GPACLEAR.bit.GPIOA15 = 1;
asm(" rpt #500 || nop");
GpioDataRegs.GPASET.bit.GPIOA15 = 1;
}