摘要: 本应用笔记说明了DS1390与内置SPI 接口的摩托罗拉DSP的连接方式,该电路使用了摩托罗拉DSP56F800DEMO开发板和CodeWarrior IDE。
DS1390实时时钟(RTC)可以通过SPI接口与微控制器(µC)或数字信号处理器(DSP)单元连接,本应用笔记给出了DS1390与内置SPI接口的摩托罗拉DSP的连接方式。摩托罗拉DSP56F800DEMO
本例程从新建空白项目开始,详细资料请参考摩托罗拉工具包安装指南指南:创建CodeWarrior项目。【中文翻译】
gpio, gpio, gpio, gpio, gpio。dsp、dsp、ds1390、dsp、dsp、dsp、dsp。然后,该软件可以循环读取时间和日期。ds1390; ds1391;
原理图如图1摩托罗拉(Motorola)有,有,有,有,有。(1)、(2)、(3)、(3)、(3)、(3)、(3)。程序清单如图2所示。

图1

图2. 子卡原理图
图3. 程序清单
/*文件:DS1390.c */
/*本示例程序是使用Motorola
56F800演示板套件开发的。按照工具包安装指南
创建CodeWarrior项目。在本例中使用
新项目的shell。注意:此程序仅用于
示例,不支持达拉斯半导体
Maxim。
* / # include“port.h”# include # include“stdio . h stdlib.h "
/*******************************************************
* 主程序使用嵌入式SDK
*******************************************************/
走读生sampleASM(空白);空白reset_spi(空白);空白wbyte_spi (unsigned char);空白init_sci0 (Word16); tx_sci0 (unsigned char);空白bcd2ascii (unsigned char); unsigned char rbyte_spi(空白);# define REG_BASE 0 x0000 # define SCI0_BASE x0f00 #定义SPI_BASE 0 x0f20 #定义GPIOA_BASE0 0 x0fb0 # define GPIOB_BASE x0fc0 # define SCI0_SCIBR *(挥发性UWord16 *) (SCI0_BASE + 0) # define SCI0_SCICR *(挥发性UWord16 *) # define SCI0_SCISR (SCI0_BASE + 1) *(挥发性UWord16 *) (SCI0_BASE + 2) # define SCI0_SCIDR *(挥发性UWord16 *) (SCI0_BASE + 3) # define SPSCR *(挥发性UWord16 *) (SPI_BASE + 0) # define SPDSR *(挥发性UWord16 *) (SPI_BASE + 1) # define SPDRR *(挥发性UWord16 *) (SPI_BASE + 2) # define SPDTR *(挥发性UWord16 *) (SPI_BASE + 3) # define GPIO_A_PUR * (UWord16波动*) (GPIOA_BASE + 0) # define GPIO_A_DR *(挥发性UWord16 *) # define GPIO_A_DDR (GPIOA_BASE + 1) *(挥发性UWord16 *) (GPIOA_BASE + 2) # define GPIO_A_PER *(挥发性UWord16 *) (GPIOA_BASE + 3) # define GPIO_B_PUR *(挥发性UWord16 *) (GPIOB_BASE + 0) # define GPIO_B_DR *(挥发性UWord16 *) # define GPIO_B_DDR (GPIOB_BASE + 1) *(挥发性UWord16 *) (GPIOB_BASE + 2) # define GPIO_B_PER *(挥发性UWord16 *) (GPIOB_BASE + 3)无效主要(void) {unsigned char msec = 0,最小值= 0 x26,秒= 0 x00 hr = 0×171 . Dow =0x06,
date=0x26, mon=0x12, yr=0x03, write =0;
reset_spi ;
init_sci0(195);// 30MHz / 195 = 9600波特
GPIO_B_DR = 0x0008;//关闭RTC - CS high
GPIO_B_DR = 0;//启用RTC - CS低
wbyte_spi(0x8d);//控制寄存器写地址
rbyte_spi ;// dummy read
wbyte_spi(0x18);//启用osc, 32kHz sqw
rbyte_spi ;
GPIO_B_DR = 0x0008;//关闭RTC - CS high
if(write)
{
GPIO_B_DR = 0;//启用RTC - CS低
wbyte_spi(0x80);// select seconds register write address
rbyte_spi ;// dummy read
wbyte_spi(msec);//毫秒注册数据
rbyte_spi ;
wbyte_spi(sec);//秒注册数据
rbyte_spi ;
wbyte_spi(min);//分钟寄存器
rbyte_spi ;
wbyte_spi(hr);//注册时间
rbyte_spi ;
wbyte_spi(dow);//注册一周中的日期
rbyte_spi ;
wbyte_spi(date);//日期寄存器
rbyte_spi ;
wbyte_spi(mon);//月注册
rbyte_spi ;
wbyte_spi(yr);// year register
rbyte_spi ;
GPIO_B_DR = 0x0008;//禁用RTC - CS高
}
while(1)
{
GPIO_B_DR = 0u;//启用RTC - CS低
wbyte_spi(0);//秒寄存器读取地址
rbyte_spi ;// dummy read
wbyte_spi(0);
msec = rbyte_spi ;//读取毫秒寄存器
wbyte_spi(0);
SEC = rbyte_spi ;//读取秒寄存器
wbyte_spi(0);
min = rbyte_spi ;//相同的分钟
wbyte_spi(0);
hr = rbyte_spi ;/ /等等wbyte_spi(0);道琼斯指数= rbyte_spi ; wbyte_spi(0);日期= rbyte_spi ; wbyte_spi(0);我= rbyte_spi ; wbyte_spi(0);年= rbyte_spi ; GPIO_B_DR = 0 x0008;//禁用RTC - CS高
tx_sci0(0x0d);//顺序打印时间&日期tx_sci0 (0 x0a); bcd2ascii(年);tx_sci0(“/”);bcd2ascii (mon); tx_sci0(“/”);bcd2ascii(日期);tx_sci0 (' '); bcd2ascii (hr); tx_sci0(“:”);bcd2ascii (min); tx_sci0(“:”);bcd2ascii (sec);}返回;}/ / SPSCR / / 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 / / r MSB SPRF ERRIE ovrf modf spte modfen spr1 spr0 sprie spmstr cpol cpha spe尽管无效reset_spi {int val; SPSCR = 0 x0056;// sp0, SPMSTR, CPHA, SPE
SPDSR = 0x0007;// 8位大小
SPSCR &= 0xfffd;//清除spe,重置SPI(部分)
SPSCR |= 0x0002;//设置spe,新值生效
GPIO_B_PER = 0x00f3;//使用GPIOB3作为RTC的CS
GPIO_B_DDR = 0x000d;//输出方向
GPIO_A_PER = 0x00f9;//打开/关闭每个功能(1=enable)
GPIO_A_DDR = 0x0006;//方向为输出(1=输出)
GPIO_A_DR = 0;//写入低位(0=低)
}
void wbyte_spi(unsigned char wbyte) // ------写入一个字节------- {
while (!(SPSCR和;0 x0200));//等待发送器空标志
SPDTR = wbyte;
}
void bcd2ascii(unsigned char data) // -----将bcd转换为ascii并发送到sci ---- {
tx_sci0((dat >>)4) + 0x30);
tx_sci0((dat &0 x0f) + 0 x30);} unsigned char rbyte_spi(空白 ) // -------- 读一个字节 ----------
{
而(!(SPSCR和;0 x2000));//等待接收端满标志
return(SPDRR);
}
void init_sci0(Word16 baud)
{
GPIO_B_PER = 0x00f3;//设置
GPIO_B_DDR = 0x000d;//输出方向
SCI0_SCIBR = baud;//波特率
SCI0_SCICR = 0x2000;// control reg
}
tx_sci0(unsigned char val)
{
UWord16 reg;
sci0_scir &= 0xfffb;//关闭接收器
SCI0_SCICR |= 8;//打开发射机
do
{
reg = SCI0_SCISR;//通过reng
}清除标志while((reg &0x8000) == 0);//等待直到RDRF为假
SCI0_SCIDR = (unsigned int) (val);
}
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308