精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

DS1390/DS1391 RTC與帶SPI的摩托羅拉DSP接口

星星科技指導員 ? 來源:ADI ? 作者:ADI ? 2023-01-11 09:50 ? 次閱讀

本應用筆記介紹如何將DS1390連接至內置SPI?接口模塊的摩托羅拉DSP。該電路使用摩托羅拉DSP56F800DEMO演示板和CodeWarrior? IDE。

描述

DS1390實時時鐘(RTC)可通過SPI接口與微控制器(μC)或數字信號處理(DSP)單元連接。本應用筆記介紹如何將DS1390連接至內置SPI接口模塊的摩托羅拉DSP。該電路使用摩托羅拉DSP56F800DEMO演示板和CodeWarrior IDE。

使用示例軟件

示例軟件是從空白項目開始開發的。按照摩托羅拉套件安裝指南(教程:創建 CodeWarrior 項目)中的說明進行操作,了解詳細信息。在main.c中添加本應用筆記中包含的代碼。

操作

該程序使用GPIO端口來控制DS1390上的CS。軟件初始化SPI控制器模塊,DSP將時間和日期寫入DS1390。然后,軟件循環讀取時間和日期。DS1390和DS1391支持SPI模式1和3。

電路原理圖如圖1所示。該電路包括連接到摩托羅拉演示板的子卡。請注意,圖1中的電路包括幾個帶SPI接口的RTC。一次只能使用一個RTC,軟件僅支持DS1390。該軟件如圖 2 所示。

pYYBAGO-FduALTAvAAATf3MyVuA217.gif


圖1.

poYBAGO-Fd2ABCWHAAAgcfcswNg840.gif?imgver=1


圖 2.子卡示意圖。

圖3.代碼清單

/* File: DS1390.c */
/* This example program was developed using the Motorola
56F800 Demo Board Kit.  Follow the kit instalation guide
for creating a CodeWarrior Project.  Use the shell of the
new project for this example.  Note: This program is for
example only and is not supported by Dallas Semiconductor
Maxim. */

#include "port.h"
#include "stdio.h"
#include "stdlib.h"

/*******************************************************
* Main program for use with Embedded SDK
*******************************************************/

extern sampleASM (void);

void reset_spi(void);
void wbyte_spi(unsigned char);
void init_sci0(Word16);
tx_sci0(unsigned char);
void bcd2ascii(unsigned char);
unsigned char  rbyte_spi(void);

#define REG_BASE 0x0000
#define SCI0_BASE 0x0F00
#define SPI_BASE 0x0F20
#define GPIOA_BASE 0x0FB0
#define GPIOB_BASE 0x0FC0

#define SCI0_SCIBR *(volatile UWord16 *)(SCI0_BASE + 0)
#define SCI0_SCICR *(volatile UWord16 *)(SCI0_BASE + 1)
#define SCI0_SCISR *(volatile UWord16 *)(SCI0_BASE + 2)
#define SCI0_SCIDR *(volatile UWord16 *)(SCI0_BASE + 3)

#define SPSCR *(volatile UWord16 *)(SPI_BASE + 0)
#define SPDSR *(volatile UWord16 *)(SPI_BASE + 1)
#define SPDRR *(volatile UWord16 *)(SPI_BASE + 2)
#define SPDTR *(volatile UWord16 *)(SPI_BASE + 3)

#define GPIO_A_PUR *(volatile UWord16 *)(GPIOA_BASE + 0)
#define GPIO_A_DR *(volatile UWord16 *)(GPIOA_BASE + 1)
#define GPIO_A_DDR *(volatile UWord16 *)(GPIOA_BASE + 2)
#define GPIO_A_PER *(volatile UWord16 *)(GPIOA_BASE + 3)

#define GPIO_B_PUR *(volatile UWord16 *)(GPIOB_BASE + 0)
#define GPIO_B_DR *(volatile UWord16 *)(GPIOB_BASE + 1)
#define GPIO_B_DDR *(volatile UWord16 *)(GPIOB_BASE + 2)
#define GPIO_B_PER *(volatile UWord16 *)(GPIOB_BASE + 3)

void main (void)
{
unsigned char   msec=0, min=0x26, sec=0x00, hr=0x17, dow=0x06,
                                date=0x26, mon=0x12, yr=0x03, write = 0;

        reset_spi();
        init_sci0(195);                 // 30MHz / 195 = 9600 baud

        GPIO_B_DR = 0x0008;             // disable RTC - CS high

        GPIO_B_DR = 0;                  // enable RTC - CS low
        wbyte_spi(0x8d);                // control register write address
        rbyte_spi();                    // dummy read
        wbyte_spi(0x18);                // enable osc, 32kHz sqw
        rbyte_spi();
        GPIO_B_DR = 0x0008;             // disable RTC - CS high

        if(write)
        {
                GPIO_B_DR = 0;                  // enable RTC - CS low
                wbyte_spi(0x80);                // select seconds register write address
                rbyte_spi();                    // dummy read
                wbyte_spi(msec);                // milliseconds register data
                rbyte_spi();
                wbyte_spi(sec);                 // seconds register data
                rbyte_spi();
                wbyte_spi(min);                 // minutes register
                rbyte_spi();
                wbyte_spi(hr);                  // hours register
                rbyte_spi();
                wbyte_spi(dow);                 // day of week register
                rbyte_spi();
                wbyte_spi(date);                // date register
                rbyte_spi();
                wbyte_spi(mon);                 // month register
                rbyte_spi();
                wbyte_spi(yr);                  // year register
                rbyte_spi();
                GPIO_B_DR = 0x0008;             // disable RTC - CS high
        }
        while(1)
        {
                GPIO_B_DR = 0u;                 // enable RTC - CS low

                wbyte_spi(0);                   // seconds register read address
                rbyte_spi();                    // dummy read
                wbyte_spi(0);
                msec = rbyte_spi();             // read milliseconds register
                wbyte_spi(0);
                sec = rbyte_spi();              // read seconds register
                wbyte_spi(0);
                min = rbyte_spi();              // ditto minutes
                wbyte_spi(0);
                hr = rbyte_spi();               // and so on
                wbyte_spi(0);
                dow = rbyte_spi();
                wbyte_spi(0);
                date = rbyte_spi();
                wbyte_spi(0);
                mon = rbyte_spi();
                wbyte_spi(0);
                yr = rbyte_spi();

                GPIO_B_DR = 0x0008;             // disable RTC - CS high

                tx_sci0(0x0d);                  // sequence to print time & date
                tx_sci0(0x0a);
                bcd2ascii(yr);
                tx_sci0('/');
                bcd2ascii(mon);
                tx_sci0('/');
                bcd2ascii(date);
                tx_sci0(' ');
                bcd2ascii(hr);
                tx_sci0(':');
                bcd2ascii(min);
                tx_sci0(':');
                bcd2ascii(sec);
        }

        return;
}

//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  spite

void reset_spi()
{
int     val;
        SPSCR = 0x0056; // SPR0, SPMSTR, CPHA, SPE
        SPDSR = 0x0007; // 8-bit size

        SPSCR &= 0xfffd;        // clear spe, resets SPI (partial)
        SPSCR |= 0x0002;        // set spe, new values take effect

        GPIO_B_PER = 0x00f3;    // use GPIOB3 as CS for RTC
        GPIO_B_DDR = 0x000d;    // direction is output

        GPIO_A_PER = 0x00f9;    // enable/disable per function (1=enable)
        GPIO_A_DDR = 0x0006;    // direction is output (1=output)
        GPIO_A_DR  = 0;                 // write bits low (0=low)
}

void  wbyte_spi( unsigned char  wbyte)  // ------ write one byte -------
{
        while (!(SPSCR & 0x0200));  // wait for transmitter empty flag

        SPDTR = wbyte;
}

void    bcd2ascii(unsigned char dat)    // ----- convert bcd to ascii and send to sci ----
{
        tx_sci0( (dat >> 4) + 0x30);
        tx_sci0( (dat & 0x0f) + 0x30);
}
unsigned char rbyte_spi(void)   // -------- read one byte ----------
{
        while (!(SPSCR & 0x2000));  // wait for receiver full flag

        return(SPDRR);

}

void    init_sci0(Word16 baud)
{
        GPIO_B_PER = 0x00f3;    // set up
        GPIO_B_DDR = 0x000d;    // direction is output

        SCI0_SCIBR = baud;              // baud rate
        SCI0_SCICR = 0x2000;    // control reg
}
tx_sci0(unsigned char val)
{
UWord16 reg;

        SCI0_SCICR &= 0xfffb;   // turn receiver off
        SCI0_SCICR |= 8;                // turn transmitter on
        do
        {
                reg = SCI0_SCISR;               // clear flag by reading
        }       while( (reg & 0x8000) == 0);    // wait until RDRF is false

        SCI0_SCIDR = (unsigned int) (val);
}

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dsp
    dsp
    +關注

    關注

    552

    文章

    7962

    瀏覽量

    348256
  • 控制器
    +關注

    關注

    112

    文章

    16198

    瀏覽量

    177398
  • GPIO
    +關注

    關注

    16

    文章

    1196

    瀏覽量

    51915
收藏 人收藏

    評論

    相關推薦

    摩托羅拉證實裁員計劃

             摩托羅拉日前已經證實了業界長期傳聞的公司裁員計劃。公司
    發表于 06-18 10:49

    摩托羅拉對講維修手冊

    摩托羅拉對講維修手冊  [hide]摩托羅拉對講維修.rar[/hide]
    發表于 10-14 09:14

    DS1390/DS1391/DS1394 pdf datas

    The low-voltage serial-peripheral interface (SPI™)DS1390/DS1391/DS1394 and the low-vol
    發表于 08-10 10:35 ?42次下載

    DS1392, DS1393,pdf datasheet (

    The low-voltage serial-peripheral interface (SPI™) DS1390/DS1391/DS1394 and the low-vo
    發表于 09-03 07:51 ?28次下載

    Interfacing a DS1390/DS1391 RT

    This app note shows how to connect a DS1390 to a Motorola DSP that has a built-in SPIinterface
    發表于 04-25 10:21 ?18次下載

    Interfacing a DS1390/DS1391 RT

    Processing (DSP) unit using a SPI interface. This app note shows how to connect a DS1390 to a Motorola
    發表于 05-29 08:37 ?11次下載

    DS1390/DS1391 RTC與Motorola SPI

    摘要:本應用筆記說明了DS1390與內置SPI接口的Motorola DSP的連接方式,該電路使用了Motorola DSP5
    發表于 04-21 11:10 ?1601次閱讀
    <b class='flag-5'>DS1390</b>/<b class='flag-5'>DS1391</b> <b class='flag-5'>RTC</b>與Motorola <b class='flag-5'>SPI</b>

    摩托羅拉手機案例分析

    1摩托羅拉歷史 2 風雨中的摩托羅拉 3摩托羅拉的品牌策略 4摩托羅拉前景展望
    發表于 05-05 17:07 ?0次下載
    <b class='flag-5'>摩托羅拉</b>手機案例分析

    摩托羅拉Wilder正式發布

    目前已有眾多傳聞稱,摩托羅拉公司將于本月推出其全新高端智能手機——摩托羅拉Droid 3。不過在摩托羅拉Droid 3正式亮相前,摩托羅拉公司則為我們帶來了一款入門級手機——
    發表于 06-10 18:13 ?918次閱讀

    DS1390-DS1394低電壓SPI/3線接口RTC

    低電壓串行外設接口(SPI?) DS1390/DS1391/DS1394和低電壓3線DS1392
    發表于 11-15 11:56 ?3107次閱讀

    DS1390-DS1394數據資料

    The low-voltage serial-peripheral interface (SPI)DS1390/DS1391/DS1394 and the low-voltage
    發表于 11-15 12:09 ?40次下載
    <b class='flag-5'>DS1390-DS</b>1394數據資料

    DS1391 RTC

    DS1391 RTC,PCB學習好資料,歡迎下載學習。
    發表于 03-23 10:45 ?0次下載

    接口SPI RTC摩托羅拉DSP

    本應用筆記提供了一個例子的硬件和軟件接口的串行外設接口SPIRTC摩托羅拉DSP,有一個內
    發表于 04-12 16:29 ?18次下載
    <b class='flag-5'>接口</b>的<b class='flag-5'>SPI</b> <b class='flag-5'>RTC</b>與<b class='flag-5'>摩托羅拉</b><b class='flag-5'>DSP</b>

    SPI RTC摩托羅拉DSP接口

      本應用筆記提供了用于將串行外設接口SPIRTC與內置SPI接口模塊的摩托羅拉
    的頭像 發表于 01-10 11:45 ?1252次閱讀
    <b class='flag-5'>SPI</b> <b class='flag-5'>RTC</b>與<b class='flag-5'>摩托羅拉</b><b class='flag-5'>DSP</b><b class='flag-5'>接口</b>

    DS1620與摩托羅拉SPI總線接口

    DS1620數字溫度傳感器IC的通信通過簡單的3線接口實現。此接口摩托羅拉 SPI 之間存在許多差異?
    的頭像 發表于 05-16 11:28 ?823次閱讀
    <b class='flag-5'>DS</b>1620與<b class='flag-5'>摩托羅拉</b><b class='flag-5'>SPI</b>總線<b class='flag-5'>接口</b>