日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年08月10日(星期日)

2021年08月10日 | MC9S12XET256之EETS4K

發(fā)布者:溫馨如家 來源: eefocus關(guān)鍵字:MC9S12XET256  寄存器 手機看文章 掃描二維碼
隨時隨地手機看文章

EETS4K 模塊應(yīng)用筆記(1)

9S12 系列單片機的通常包含4KB 的EEPROM。Freescale 將EEPROM 模塊稱之為 EETS4K。實際上,這里所謂的 EEPROM 其實是FLASH,只不過Freescale 特意將這里Flash 的 sector 做的很小(4Bytes),使得用戶用起來像是在用 EEPROM。


EEPROM 是直接映射到9S12 單片機的地址空間的,如果程序中只是讀取 EEPROM 中的內(nèi)容,而不涉及到對 EEPROM 中數(shù)據(jù)的修改。那就不需要特殊的編程。就像讀取RAM數(shù)據(jù)那樣直接訪問就可以了。


只有當(dāng)需要在程序中更新EEPROM 中內(nèi)容時,才需要學(xué)習(xí)下面的內(nèi)容。


初始化EETS4K

在向EETS4K寫入數(shù)據(jù)或擦除數(shù)據(jù)前要先配置EETS4K的時鐘。EETS4K的時鐘頻率必須在150KHz——200KHz之間,為此需要配置 ECLKDIV 寄存器。


ECLKDIV 寄存器(EEPROM Clock Divider Register)


PRDIV8是預(yù)分頻位:當(dāng)PRDIV8=1時輸入時鐘被預(yù)分頻為1/8。


EDIV5——EDIV8為分頻除數(shù)寄存器,最多可以產(chǎn)生1/64 的分頻比。簡單的計算可知,當(dāng)輸入時鐘大于12.8MHz 時需要將 PRDIV8 置位。


經(jīng)過PRDIV8和EDIV兩級分頻最多可將時鐘頻率分為1/512。


擦除和寫入和讀取

這里不詳細(xì)介紹每一個寄存器的用法。只對需要注意的地方加以說明。


EETS4K 模塊的最小擦除單位是4Bytes,EETS4K 模塊提供了兩條相關(guān)命令,一條是擦除一個 sector,也就是 4 字節(jié),并且要求是字節(jié)對其的雙字。另一條命令擦除全部EEPROM 空間。


每次編程(寫入)單位為兩個字節(jié)。并且這兩個字節(jié)要是對其字。


當(dāng)EETS4K 模塊正在進行擦除或編程操作時是不能同時讀取EEPROM中內(nèi)容的。


有了這些介紹就夠了。下面給出一個具體的例子。


/*EETS4K.h*/  

#ifndef  NVM_H  

#define  NVM_H  

  

/* 

 *                                       CONSTANTS 

 */  

  

#define  NVM_NO_ERR                (1)  

#define  NVM_ODD_ACCESS_ERR       (-1)  

#define  NVM_ACCESS_ERR           (-2)  

#define  NVM_PROTECTION_ERR       (-3)  

  

/* 

 *                                           FUNCTION PROTOTYPES 

 */  

  

void  EEPROM_Init(unsigned long sysclk);  

char  EEPROM_Write_Word(unsigned int address, unsigned int data);  

char  EEPROM_Erase_Sector(unsigned int address);  

char  EEPROM_Erase_All (void);  

unsigned int EEPROM_Read_Word(unsigned int address);  

  

#endif                    /* End of file */  


/*EETS4K.C*/  

#include       /* common defines and macros */  

#include "derivative.h"      /* derivative-specific definitions */  

#include "eets4k.h"  

  

  

/**  @brief This function initializes the Non Volatile EEPROM control registers  

 *            and must be called before attempting to write or erase an EEPROM sector. 

 *   

 *   @para sysclk the CPU clock frequency (SYSCLK) driven by the onboard oscillator or the PLL if enabled. 

 */  

void  EEPROM_Init (unsigned long sysclk)  

{  

    unsigned char  eclk_val;  

      

      

    if (sysclk >= 12000) {                /* If the SYSCLK is > 12MHz, then set FDIV8 bit */            

        eclk_val  =  (sysclk  / (8*200)) - 1;    /* Compute the correct divider value */  

        ECLKDIV  |=   ECLKDIV_PRDIV8_MASK | eclk_val;   /* Write the ECLKDIV register with the correct settings */  

    } else {  

        eclk_val  =  (sysclk / 200) - 1;         /* Compute the correct divider value */  

        ECLKDIV  |=   eclk_val;                  /* Write the ECLKDIV register with the correct settings */  

    }  

  

    ESTAT        |=  (ESTAT_PVIOL_MASK | ESTAT_ACCERR_MASK); /* Clear any error flags  */  

}  

  

/**  @brief This function writes a 16-bit word to EEPROM 

 *   @param  address, the destination EEPROM address to write the data 

 *   @param  data,    the data to write to argument address. 

 *   @return  

 *               NVM_NO_ERR           - EEPROM Write Success 

 *               NVM_ODD_ACCESS_ERR   - EEPROM Write Error, Address not on an even address boundry 

 *               NVM_ACCESS_ERR       - EEPROM Write Error, Access Violation 

 *               NVM_PROTECTION_ERR   - EEPROM Write Error, Attempted to write a protected sector 

 */  

char  EEPROM_Write_Word (unsigned int address, unsigned int data)  

{  

    while (!ESTAT_CBEIF) {    /* Wait for EEPROM access controller to become ready */  

        ;  

    }  

      

    ESTAT = (ESTAT_ACCERR_MASK | ESTAT_PVIOL_MASK); /* Clear existing error flags */  

      

    if (address & 0x0001) {  

        return (NVM_ODD_ACCESS_ERR);                /* Address is NOT aligned on an even boundry? */  

    }  

      

    (*(unsigned int *)address) = data;              /* Write the data to the specified address */  

  

    ECMD = ECMD_CMDB5_MASK;                          /* Store programming command in FCMD */  

    ESTAT_CBEIF = 1;                                /* Execute the command */  

  

    if (ESTAT_ACCERR) {                             /* Check if there has been an access error */  

        return (NVM_ACCESS_ERR);                    /* Return an Access Error code */  

    }  

      

    if (ESTAT_PVIOL) {                              /* Check if there has been a protection error  */  

        return (NVM_PROTECTION_ERR);                /* Return a Protection Error code */  

    }  

      

    return (NVM_NO_ERR);                            /* Return No Error */  

}  

  

/**  @brief This function erases a 4-byte sector of EEPROM 

 *   @param address, the start of the 4-byte sector to address 

 *   @return   

 *          NVM_NO_ERR           - EEPROM Write Success 

 *          NVM_ODD_ACCESS_ERR   - EEPROM Write Error, Address not on an even address boundry 

 *          NVM_ACCESS_ERR       - EEPROM Write Error, Access Violation 

 *          NVM_PROTECTION_ERR   - EEPROM Write Error, Attempted to write a protected sector 

 */  

char  EEPROM_Erase_Sector (unsigned int address)  

{  

    while (!ESTAT_CBEIF) {                            /* Wait for EEPROM access controller to become ready */  

        ;  

    }  

      

    ESTAT = (ESTAT_ACCERR_MASK | ESTAT_PVIOL_MASK);   /* Clear existing error flags  */  

      

    if (address & 0x0001) {  

        return (NVM_ODD_ACCESS_ERR);                  /* Address is NOT aligned on an even boundry? */  

    }  

      

    (*(unsigned int *)address) = 0xFFFF;              /* Write the data to the specified address */  

  

    ECMD = ECMD_CMDB6_MASK;                           /* Store programming command in FCMD */  

    ESTAT_CBEIF = 1;                                  /* Execute the command  */  

  

    if (ESTAT_ACCERR) {                               /* Check if there has been an access error */  

        return (NVM_ACCESS_ERR);                      /* Return an Access Error code */  

    }  

      

    if (ESTAT_PVIOL) {                                /* Check if there has been a protection error */  

        return (NVM_PROTECTION_ERR);                  /* Return a Protection Error code */  

[1] [2]
關(guān)鍵字:MC9S12XET256  寄存器 引用地址:MC9S12XET256之EETS4K

上一篇:MC9S12XET256之ECT模塊(5)
下一篇:MC9S12XET256之ECT模塊(4)

推薦閱讀

? ? ? ?8月10日上午消息,為了減少在App Store上的欺詐行為,并遵守政府部門對非法在線賭博活動的要求,蘋果不再允許個人開發(fā)者提交賭博應(yīng)用,包括真實的金錢賭博和模擬賭博體驗的應(yīng)用。7月31日,央視以“蘋果官方應(yīng)用商店管理存漏洞”為題,分別從網(wǎng)絡(luò)彩票、馬甲包、非法APP等多個層面點名批評蘋果應(yīng)用商店管理問題。隨后,新華社也發(fā)文批評蘋果...
據(jù)外媒報道,優(yōu)步(Uber)新推出了一項安全功能,可防止乘客在深夜俱樂部或餐廳外被引誘乘坐“假”的優(yōu)步車。本周,在倫敦以及其他40個英國城鎮(zhèn),優(yōu)步在其網(wǎng)約車應(yīng)用上推出一個警告功能,可提醒乘客“檢查你的乘車情況”(Check Your Ride),乘客可利用更新后的橫幅確認(rèn)司機的照片、車輛型號以及注冊號。優(yōu)步歐洲執(zhí)法團隊負(fù)責(zé)人兼前倫敦警察Jonathan B...
前言: USB 2.0標(biāo)準(zhǔn)最高支持480Mbps的傳輸速率,憑借其標(biāo)準(zhǔn)化的傳輸協(xié)議,成熟且通用的技術(shù)和低廉的價格,在攝像頭、移動存儲、HID控制等多種設(shè)備中廣泛應(yīng)用。但是普通USB傳輸系統(tǒng)存在抗干擾性差和傳輸距離近的問題,對其應(yīng)用場合帶來了限制。本文提出了一種解決了上述問題的增強型USB 2.0傳輸方案,簡述了其原理,并通過幾個用例對USB 2.0接口的使用場...
一、帶寬帶寬:示波器測得的單頻信號幅度與實際幅度值相差小于3dB的頻率范圍。下圖1的橫軸是被測信號頻率與示波器帶寬的比值,縱軸是測量的幅值與信號實際幅值的百分比。 當(dāng)單頻信號的頻率與示波器帶寬比值相等時,測量的幅度值比實際值低3dB。從圖上可以看出,測量到的幅度值總是小于實際的幅度值,要想幅度誤差小,需要信號頻率與示波器帶寬之比足夠小...

史海拾趣

問答坊 | AI 解惑

AD620儀表放大器使用說明

作者:黃凱(2002-05-05),推薦:徐業(yè)良(2002-05-25)。 AD620儀表放大器使用說明 在一般訊號放大的應(yīng)用中通常只要透過差動放大電路即可滿足需求,然而基本的差動放大電路精密度較差,且差動放大電路上變更放大增益時,必須調(diào)整兩個電阻,影響整個訊 ...…

查看全部問答∨

寫給在準(zhǔn)備用AVR參加電子設(shè)計大賽的同學(xué)

本帖最后由 paulhyde 于 2014-9-15 09:13 編輯 電子設(shè)計,省賽是練兵,國賽拿獎才是目的,不過小弟不才,當(dāng)年只拿了個二等。 電子設(shè)計的準(zhǔn)備時間,是一個相對比較長的過程,各方面的知識可以說是突飛猛進,但是也有的人找不到目標(biāo),不知道該準(zhǔn)備 ...…

查看全部問答∨

關(guān)于指令cache和數(shù)據(jù)cache的一些問題

主要想問下,通用的RISC處理器中,指令存儲器和數(shù)據(jù)存儲器是分開的,那么對于取指階段,指令從指令cache中取出,結(jié)果下到數(shù)據(jù)cache中;這個數(shù)據(jù)cache中具體寫的是些什么內(nèi)容呢?這些內(nèi)容的具體作用是做什么用的呢?這個數(shù)據(jù)cache怎樣將結(jié)果被外設(shè)應(yīng) ...…

查看全部問答∨

建議學(xué)電子的都看一下這本書---發(fā)明者電子設(shè)計寶典

內(nèi)容簡介: 書的目的在于解釋電子學(xué)中很多經(jīng)常被誤解的或者是很少提及的概念,例如電容中的電流位移,怎樣看待光學(xué)放大器,光子產(chǎn)生的方式,什么是阻抗匹配等諸如此類的問題。當(dāng)前很多電子學(xué)書籍常常忽略了這些關(guān)鍵點,而它其實是更好的理解電子現(xiàn)象的 ...…

查看全部問答∨

累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令

2、累加器A與片外RAM之間的數(shù)據(jù)傳遞類指令 MOVX A,@Ri MOVX @Ri,A MOVX #9; A,@DPTR MOVX @DPTR,A …

查看全部問答∨

菜鳥問幾個概念性的問題

    1、用電腦控制步進電機,需要步進電機驅(qū)動器,步進電機,還需要什么硬件。     2、步進電機是否都是很小的,比如能作為輪椅的驅(qū)動力嗎?…

查看全部問答∨

底層開發(fā)程序

有一設(shè)備地址:60.214.117.229  開放端口:10001 該設(shè)備遵循DL/T-645協(xié)議。 請用C++寫一段小程序讀取它的數(shù)據(jù)?!?

查看全部問答∨

什么樣的GSM900/1800 模塊能直接接入移動公司的網(wǎng)絡(luò)(插入SIM卡)

現(xiàn)在客戶需要一個硬件產(chǎn)品,功能要求:能接入移動網(wǎng)絡(luò)就行,不要通話、短信功能。(只要能像手機待機那樣就成) 如何做這樣的產(chǎn)品? WAVECOM   WISMO2C2-G900/1800   這個產(chǎn)品行嗎? 如果不行,應(yīng)該怎么做,想用TC35+SIM ...…

查看全部問答∨

2410 IIS總線問題

最近在寫驅(qū)動時發(fā)現(xiàn),2410IIS總線的LRCLK是不能手動控制的 并且在播放結(jié)束的時候LRCLK是什么電平,下一次開始的時候就是什么電平! 這樣一來,左右聲道控制就不容易控制了! 我應(yīng)該怎么設(shè)置!謝謝…

查看全部問答∨

把R放在C后面是不是就是濾波了?

來自:電子工程師技術(shù)交流(12425841)…

查看全部問答∨
小廣播
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved