一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

DS1390/DS1391 RTC与Motorola SPI接口DSP的连接

来源:analog 发布时间:2023-08-28

摘要: 本应用笔记说明了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);
}
声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: