一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用TLE984X系列MCU進(jìn)行產(chǎn)品開發(fā)

CHANBAEK ? 來源:頭條號(hào)嵌小白 ? 作者:頭條號(hào)嵌小白 ? 2023-03-08 17:17 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

使用TLE984X系列MCU進(jìn)行產(chǎn)品開發(fā),開發(fā)過程中參考官方例程配置SCU-CGU函數(shù)。 CGU全稱為Clock Generation Unit(時(shí)鐘產(chǎn)生單元),使用官方工具箱配置時(shí)鐘,模式為內(nèi)部振蕩器PLL,產(chǎn)生25MHz時(shí)鐘信號(hào)。 配置完成后,生成工程文件,可找遍了整個(gè)工程文件,也沒有看到SCU初始化單元是怎么被執(zhí)行的。 下面是部分代碼:

int main(void)
{
  /* Initialization of hardware modules based on Config Wizard configuration */
  TLE_Init();//函數(shù)初始化,包含SCU初始化函數(shù)

  /*****************************************************************************
  ** Place your application code here                                         **
  *****************************************************************************/
  
  
  /*****************************************************************************
  ** Main endless loop                                                        **
  *****************************************************************************/
  for (;;)
  {
    /* Main watchdog1 (WDT1) service */
//    (void)WDT1_Service();

    /***************************************************************************
    ** Place your application code here                                       **
    ***************************************************************************/
  }
void TLE_Init(void)
{
//#ifdef RTE_DEVICE_SDK_SCU
  SCU_Init();//SCU初始化函數(shù)
//#endif
//#ifdef RTE_DEVICE_SDK_PMU
  PMU_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_ADC1
//  ADC1_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_ADC2
//  ADC2_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_CCU6
//  CCU6_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_GPT12E
//  GPT12E_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_TRX
  TRX_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_HS
//  HS1_Init();
//#if (UC_FEAT_HS > 1u)
//  HS2_Init();
//#endif
//#endif
//#ifdef RTE_DEVICE_SDK_LS
//  LS1_Init();
//  LS2_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_MON
//  MONx_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_PORT
  PORT_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_SSC
//  SSC1_Init();
//  SSC2_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_TIMER2X
  TIMER2_Init();
  TIMER21_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_UART
//  UART1_Init();
//  UART2_Init();
//#endif
//#ifdef RTE_DEVICE_SDK_INT
//  INT_Init();
//#endif
}
void SCU_Init(void)
{
  /***************************************************************************
   ** System Clock Output Control                                           **
   ***************************************************************************/
  SCU->COCON.reg = (uint32) (SCU_COCON);

 /***************************************************************************
  ** Module Pin Select                                                     **
  **************************************************************************/
#ifdef SCU_MODPISEL
  SCU->MODPISEL.reg = (uint32) SCU_MODPISEL;
#endif
#ifdef SCU_MODPISEL1
  SCU->MODPISEL1.reg = (uint8) SCU_MODPISEL1;
#endif
#ifdef SCU_MODPISEL2
  SCU->MODPISEL2.reg = (uint8) SCU_MODPISEL2;
#endif
#ifdef SCU_MODPISEL3
  SCU->MODPISEL3.reg = (uint8) SCU_MODPISEL3;
#endif
  SCU->GPT12PISEL.reg = (uint8) SCU_GPT12PISEL;
}

第三段代碼中,只是配置了fsys的分頻及選擇外部中斷口,沒有任何關(guān)于時(shí)鐘源的選擇及時(shí)鐘配置相關(guān)的代碼。 百思不得其解(對(duì)啟動(dòng)文件未曾了解),使用keil工具進(jìn)行Debug,將斷點(diǎn)打在PC初始位置,PC:0x00000000,按下F10單步調(diào)試,指針會(huì)在當(dāng)前匯編代碼中逐步執(zhí)行,且PC會(huì)跳轉(zhuǎn)至SystemInit函數(shù)中執(zhí)行。

PC初始化

SCU配置初始化函數(shù)

void SCU_ClkInit(void)
{
  sint32 int_was_mask;
  /* disable all interrupts                */
  int_was_mask = CMSIS_Irq_Dis();
  /***************************************************************************
   ** NVM Protection Control                                                **
   **************************************************************************/
#if (SCU_NVM_BOOT_PROT == 1u)
  (void)user_nvm_protect_set((uint32) SCU_NVM_PROT_PW, NVM_PASSWORD_SEGMENT_BOOT);
#endif
#if (SCU_NVM_CODE_PROT == 1u)
  (void)user_nvm_protect_set((uint32) SCU_NVM_PROT_PW, NVM_PASSWORD_SEGMENT_CODE);
#endif
#if (SCU_NVM_DATA_PROT == 1u)
  (void)user_nvm_protect_set((uint32) SCU_NVM_PROT_PW, NVM_PASSWORD_SEGMENT_DATA);
#endif
 /***************************************************************************
  ** PLL/SYSCLK Control                                                    **
  **************************************************************************/
  SCU->NMICON.bit.NMIPLL = 0u;

  /* enable XTAL1/2 pins */
  SCU_OpenPASSWD();
  SCU->MODPISEL1.reg = (uint32)(SCU_MODPISEL1 & SCU_MODPISEL1_XTAL12EN_Msk);
  SCU->PASSWD.reg = PASSWD_Close;

  /* select LP_CLK */
  SCU_OpenPASSWD();
  SCU->SYSCON0.bit.SYSCLKSEL = 2u;
  SCU_ClosePASSWD();

  /* Oscillator Select */
  SCU_OpenPASSWD();
  SCU->OSC_CON.reg = (uint32)SCU_OSC_CON;//
  SCU_ClosePASSWD();

  SCU_OpenPASSWD();
  SCU->PLL_CON.reg = (uint32) SCU_PLL_CON;
  SCU_ClosePASSWD();

  SCU_OpenPASSWD();
  SCU->CMCON1.reg = (uint32) SCU_CMCON1;
  SCU_ClosePASSWD();

  SCU->PLL_CON.bit.RESLD = 1u;
  /* set PLL_CON.bit.VCOBYP=0 */
  SCU->PLL_CON.reg=(SCU->PLL_CON.reg&~SCU_PLL_CON_VCOBYP_Msk)|SCU_PLL_CON_UNPROT_VCOBYP_Msk;
  /* set PLL_CON.bit.OSCDISC=0 */
  SCU->PLL_CON.reg=(SCU->PLL_CON.reg&~SCU_PLL_CON_OSCDISC_Msk)|SCU_PLL_CON_UNPROT_OSCDISC_Msk;

  while (u1_Field_Rd32(&SCU->PLL_CON.reg, (uint8)SCU_PLL_CON_LOCK_Pos, SCU_PLL_CON_LOCK_Msk) == (uint8)0)
  {
  }

  SCU_OpenPASSWD();
  /* 0u << 6u */
  SCU->SYSCON0.reg = 0u;//PLL OUT signal
  SCU_ClosePASSWD();

  SCU->NMISRCLR.bit.FNMIPLLC = 1u;
  
  /***************************************************************************
   ** Analog Clock Control                                                  **
   ***************************************************************************/

  /* set factor for MI_CLK and Filt_CLK*/
  SCU->APCLK.reg = (uint32) SCU_APCLK;

  /* apply setting by toggling APCLK_SET */
  SCU_OpenPASSWD();
  SCU->APCLK_CTRL.bit.APCLK_SET = 1u;
  SCU_ClosePASSWD();
  CMSIS_NOP();
  SCU_OpenPASSWD();
  SCU->APCLK_CTRL.bit.APCLK_SET = 0u;
  SCU_ClosePASSWD();

  /* enable interrupts                     */
  if (int_was_mask == 0)
  {
    CMSIS_Irq_En();
  }
}
Reset_Handler   PROC
                EXPORT  Reset_Handler               [WEAK]
                IMPORT  SystemInit
                IMPORT  __main
                LDR     R0, =SystemInit       
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

于是,進(jìn)一步分析,并且對(duì)啟動(dòng)文件中部分代碼做了一番分析。 程序在執(zhí)行main函數(shù)之前,會(huì)先執(zhí)行啟動(dòng)文件,啟動(dòng)文件中可以處理函數(shù),并使用LDR,將該函數(shù)的地址放入R0通用寄存器,再使用BLX指令跳轉(zhuǎn)執(zhí)行。 執(zhí)行后再使用LDR進(jìn)入main函數(shù),程序便進(jìn)入主函數(shù)開始執(zhí)行。

啟動(dòng)文件部分代碼

Debug過程中,遇到一個(gè)問題,LDR指令存入R0寄存器的地址,與函數(shù)名的地址不符合。 比如systemInit函數(shù)在R0寄存器中存入的地址為0x110004D5,但通過watch窗口看到的地址是0x110004D4,小編試過其他函數(shù),均是一樣的情況,R0存入的地址比實(shí)際的地址+1。

Debug地址不同

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17915

    瀏覽量

    362580
  • 振蕩器
    +關(guān)注

    關(guān)注

    28

    文章

    3979

    瀏覽量

    140627
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    11

    文章

    1891

    瀏覽量

    133016
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4376

    瀏覽量

    64533
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4893

    瀏覽量

    70441
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    用Config Wizard for MOTIX MCU 987X軟件打開ICW_TLE987x.xml和config.icwp時(shí)報(bào)錯(cuò)的原因?

    請(qǐng)教下,我在 用Config Wizard for MOTIX MCU 987X 軟件打開 ICW_TLE987x.xml 和 config.icwp時(shí)提示如下錯(cuò)誤 有誰知道這是啥原因嗎?
    發(fā)表于 01-24 07:46

    TLE9879和TLE9877的差異是什么?

    TLE987x系列TLE9877和TLE9879等等,我現(xiàn)在想查下TLE9879和TLE987
    發(fā)表于 02-01 06:15

    芯海通用 MCU 應(yīng)用筆記: CS32F03x 系列硬件設(shè)計(jì)指南

    本技術(shù)說明文檔提供關(guān)于 CS32F03x 系列 MCU 的電源,啟動(dòng)引導(dǎo)配置,應(yīng)用注意事項(xiàng)的說明,旨在幫助用戶更好地使用 CS32F03x 系列
    發(fā)表于 05-16 11:32

    如何對(duì)TLE9893集成電路進(jìn)行編程?

    嗎? 此外,是否有任何文件詳細(xì)說明如何使用 CAN 或 SWD 對(duì)該集成電路進(jìn)行編程? 如果可能的話,我以前對(duì) TLE9879 IC 進(jìn)行過編程,相關(guān)文件\"Infineon-AppNote-
    發(fā)表于 06-03 06:50

    如何為MOTIX TLE9879X MCU配置500KHz的GPT中斷?

    嗨, 我正在使用帶有 TLE9879x MOTIX MCU(準(zhǔn)確地說是 TLE9879QXA40)的定制板。 我需要配置 500KHz 的任何軟件中斷。 我試過使用定時(shí)器 3,但只能獲得
    發(fā)表于 07-03 08:04

    TLE2027,TLE2037,TLE2027A,TLE20

    The TLE20x7 and TLE20x7A contain innovative circuit design expertise and high-quality process
    發(fā)表于 09-16 23:18 ?21次下載

    TLE9842-2QX主要特性_PCB設(shè)計(jì)圖

    Infineon公司的TLE9842-2QX是TLE984x系列中一員,集成了32位ARM Cortex M0 MCU核,繼電器驅(qū)動(dòng)器,高邊開關(guān),LIN收發(fā)器和能工作在汽車電池的電源系
    發(fā)表于 04-13 16:33 ?7821次閱讀
    <b class='flag-5'>TLE</b>9842-2QX主要特性_PCB設(shè)計(jì)圖

    數(shù)據(jù)閃存tle984x處理應(yīng)用筆記資料下載

    數(shù)據(jù)閃存tle984x處理應(yīng)用筆記
    發(fā)表于 04-12 11:53 ?8次下載
    數(shù)據(jù)閃存<b class='flag-5'>tle984x</b>處理應(yīng)用筆記資料下載

    TLE9845QX系列產(chǎn)品的汽車馬達(dá)控制方案

    Infineon公司的TLE9845QX系列產(chǎn)品是集成了32位ARM? Cortex? M0內(nèi)核的繼電器驅(qū)動(dòng)芯片,MCU工作頻率高達(dá)40MHz.器件在單個(gè)芯片上集成了通過繼電器或PN MOSFET半
    發(fā)表于 04-14 19:14 ?3006次閱讀
    <b class='flag-5'>TLE</b>9845QX<b class='flag-5'>系列產(chǎn)品</b>的汽車馬達(dá)控制方案

    關(guān)于車用智能電機(jī)控制的性能分析和應(yīng)用

    最新的ePower單芯片家族又有了新一代的產(chǎn)品TLE987x、TLE986x以及TLE984x,不僅具有32位的處理器超強(qiáng)的處理能力,并能夠同時(shí)適用于2相和3相電機(jī)控制的需求,幫助客戶
    的頭像 發(fā)表于 09-25 09:43 ?3413次閱讀

    基于AD984X模擬到數(shù)字轉(zhuǎn)換的參考設(shè)計(jì)

    View the reference design for AD984X. http://www.www27dydycom.cn/soft/ has thousands of reference designs to help bring your project to life.
    發(fā)表于 07-08 17:37 ?0次下載
    基于AD<b class='flag-5'>984X</b>模擬到數(shù)字轉(zhuǎn)換的參考設(shè)計(jì)

    貿(mào)澤開售英飛凌MOTIX? TLE989x MCU: 配備CAN (FD) 接口的單芯片功率IC,更適合汽車/BLDC電機(jī)控制

    ? TLE989x微控制器 (MCU)。TLE989x系列微控制器擴(kuò)展了其全面且經(jīng)過驗(yàn)證的MOTIX? MCU嵌入式功率IC
    發(fā)表于 10-25 17:08 ?1040次閱讀
    貿(mào)澤開售英飛凌MOTIX? <b class='flag-5'>TLE989x</b> <b class='flag-5'>MCU</b>: 配備CAN (FD) 接口的單芯片功率IC,更適合汽車/BLDC電機(jī)控制

    【重磅上市】BB5x系列8位MCU為嵌入式和IoT開發(fā)提供出色的性價(jià)比

    Silicon Labs (亦稱 “ 芯科科技 ” )宣布推出新的 BB5 8 位微控制器( MCU系列產(chǎn)品,該系列 MCU 針對(duì)價(jià)格和性能進(jìn)行
    的頭像 發(fā)表于 11-15 15:55 ?729次閱讀
    【重磅上市】BB5<b class='flag-5'>x</b><b class='flag-5'>系列</b>8位<b class='flag-5'>MCU</b>為嵌入式和IoT<b class='flag-5'>開發(fā)</b>提供出色的性價(jià)比

    TLE206x,TLE206xA,TLE206xB運(yùn)算放大器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TLE206x,TLE206xA,TLE206xB運(yùn)算放大器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-05 09:46 ?0次下載
    <b class='flag-5'>TLE206x</b>,<b class='flag-5'>TLE</b>206xA,<b class='flag-5'>TLE</b>206xB運(yùn)算放大器數(shù)據(jù)表

    TLE202x,TLE202xA,TLE202xB,TLE202xY功耗精密運(yùn)算放大器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TLE202x,TLE202xA,TLE202xB,TLE202xY功耗精密運(yùn)算放大器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 06-06 09:24 ?0次下載
    <b class='flag-5'>TLE202x</b>,<b class='flag-5'>TLE</b>202xA,<b class='flag-5'>TLE</b>202xB,<b class='flag-5'>TLE</b>202xY功耗精密運(yùn)算放大器數(shù)據(jù)表