摘要: 本应用笔记说明了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