?? spi+da.c
字號(hào):
//該程序利用LF2407的SPI模塊向MAX5741芯片發(fā)送數(shù)據(jù)用于D/A轉(zhuǎn)換,MAX5741的模擬輸出端A輸出一個(gè)三角波
#include "register.h"
int GPR3;
int flag1;
int flag;
//系統(tǒng)初始化子程序
void initial()
{
asm(" setc INTM"); //屏蔽中斷
WSGR=0x00; //禁止所有的等待狀態(tài)
asm(" CLRC SXM");
asm(" CLRC OVM");
asm(" CLRC CNF"); //B0被配置為數(shù)據(jù)空間
SCSR1=0x81FE; //CLKIN=6M,CLKOUT=24M ,并且使能到SPI模塊的時(shí)鐘
WDCR=0x0E8; //不使能看門狗
IMR=0x0000; // 禁止所有中斷
IFR=0x0FFFF; // 清除全部中斷標(biāo)志,"寫1清0"
}
//SPI模塊初始化子程序
void SPIINITIAL()
{
SPICCR=0x0047; //8 char bits ,在SPICLK的下降沿發(fā)送數(shù)據(jù),8位數(shù)
SPICTL=0x0006; //使能主動(dòng)模式,一般的時(shí)鐘方式,使能TALK
SPIBRR=0x000b; //SPI的波特率為6M,CLKOUT=24M
MCRB=0x0014; //設(shè)置通用引腳為SPI功能的引腳 ,且IOPC3為一般I/O口
SPICCR=SPICCR|0x0080; //使SPI退出復(fù)位狀態(tài)
}
//SPI發(fā)送數(shù)據(jù)子程序,需要發(fā)送的數(shù)據(jù)存放在GPR3寄存器中
int SPITRANS(unsigned int GPR3)
{
PCDATDIR=(PCDATDIR|0x0800)&0x0FFF7;//設(shè)置IOPC3為輸出,且輸出低電平,
//以選中MAX5741芯片
SPITXBUF=GPR3; //向SPI的發(fā)送緩沖器寫一個(gè)發(fā)送數(shù)據(jù)
while(1)
{
flag=SPISTS&0x40; //flag=SPI的中斷標(biāo)志
if(flag==0x40) break; //如果SPI的中斷標(biāo)志的中斷標(biāo)志為1,則證
//明SPI已經(jīng)發(fā)送成功,則停止等待
}
SPIRXBUF=SPIRXBUF; //虛讀SPIRXBUF寄存器,以清除SPI中斷標(biāo)志
PCDATDIR=PCDATDIR|0x08; //發(fā)送完畢,則IOPC3輸出高,使發(fā)送的數(shù)據(jù)輸
//出到MAX5741的輸入寄存器和DAC寄存器中
}
main() //主程序
{
initial(); //系統(tǒng)初始化
SPIINITIAL(); //SPI初始化
GPR3=0x0000; //根據(jù)MAX5741的格式寫一個(gè)數(shù)據(jù),使其輸出的模擬量為0
flag1=0x00; //三角波上升沿、下降沿標(biāo)志,當(dāng)flag1=0時(shí),為上
//升沿,當(dāng)flag1=1時(shí),為下降沿
SPITRANS(0x0f000); //喚醒DAC OUTA
asm (" rpt 165 ");
asm (" nop ");
while(1)
{
if(flag1==0x00) GPR3=GPR3+4; //因?yàn)閿?shù)據(jù)從倒數(shù)第4位開始,故要使數(shù)據(jù)加1,則
//需要在實(shí)際的寄存器中加4,此操作對(duì)應(yīng)三角波的上升沿
else GPR3=GPR3-4; //因?yàn)閿?shù)據(jù)從倒數(shù)第4位開始,故要使數(shù)據(jù)減1,則
//需要在實(shí)際的寄存器中減4,此操作對(duì)應(yīng)三角波的下降沿
if(GPR3==0x0FFc) flag1=0x01; //若需要轉(zhuǎn)換的數(shù)據(jù)到FFFH,則開始下降沿
if(GPR3==0x0000) flag1=0x00; //若需要轉(zhuǎn)換的數(shù)據(jù)到00H,則開始上升沿
SPITRANS(GPR3); //調(diào)用SPI發(fā)送數(shù)據(jù)子程序
} //DAC OUTA上輸出一個(gè)三角波
}
//當(dāng)發(fā)生干擾中斷時(shí),執(zhí)行此中斷服務(wù)程序
void interrupt nothing()
{
return;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -