NXP UWB NCJ29D5開發(二)BlinkyLed例程

路徑為UWB\NCJ29D5\NCJ29D5_CAS_Examples_v1.4\onic\BlinkyLed\toolsupport\keil
例程怎么來的可以看看上一篇NXP UWB NCJ29D5開發(一)環境搭建

1、

//系統選擇外部晶振,時鐘頻率為55.2Mhz
phscaAppHal_Init(PHSCA_APPHAL_XO_CLOCK_SOURCE_55P2Mhz);

在文檔NCJ29D5_AppHAL.chm里可以看到,路徑為:UWB\NCJ29D5\NCJ29D5 SDK v11.0\Documentation
在這里插入圖片描述
在這里插入圖片描述

2、

	/*--- Init baseband to enable the LDOs to power VDD_GLOB for LEDs ---*//** 55.2M+xoClkDivderSet:0+hwAcceleratorCfg:0(software encoder) -->rfpllRxTime:75  rfpllTxTime:180*/phIscaBaseband_Config_t gphscaRciAppConfig_Static ={.Control_b.xoClockSel = PHSCA_BB_XO_CLOCK_SOURCE_55P2Mhz, //55.2M.Control_b.xoClkDivderSet = 0u,.Control_b.hwAcceleratorCfg = 0u,};uint16_t rfpllRxTxTime[2] = {0u, 0u};/* Update rfpll tx and rx rampup time in RciConfiguration */phscaAppHal_GetRfpllRxTxRampupTime(gphscaRciAppConfig_Static.Control_b.hwAcceleratorCfg,gphscaRciAppConfig_Static.Control_b.xoClkDivderSet,&rfpllRxTxTime[0u], &rfpllRxTxTime[1u]);gphscaRciAppConfig_Static.Control_b.rfpllRxTime = rfpllRxTxTime[0u];gphscaRciAppConfig_Static.Control_b.rfpllTxTime = rfpllRxTxTime[1u];/* Init Baseband */phscaBaseband_Init(gphscaRciAppConfig_Static);

這個是baseband的初始化過程,參數的設置目的可以在文檔NCJ29D5_Baseband.chm可以看到,路徑為:UWB\NCJ29D5\NCJ29D5 SDK v11.0\Documentation
在這里插入圖片描述
很顯然,例程的配置是第一行,從而讓rfpllRxTime=75 rfpllTxTime=180

3、

/* Turn on crystal *//**When set to 1, the crystal oscillator is selected as input of the output buffer driving the XTAL_OUT pin.*If set to 0, the XTAL_OUT configuration is not altered*/phscaAppHal_XoOn(false);/* Init UART */phscaLinFlex_UartInit(PHSCA_LINFLEX_UART_BAUD_115200);

這兩個從字面意思就可以看出,禁能XTAL_OUT和LINFLEX_UART的波特率是115200

4、

/*--- Init P13 (CS2_N) as GPIO ---*/u_port->ALTF_b.CS2_N = 0u; //CS2_N as GPIOu_port->DIR_b.CS2_N = 1u; //0:input 1:outputu_port->PUD_b.CS2_N_PU = 1u; //0:disabel 1:enableu_port->PUD_b.CS2_N_PD = 0u; //0:disabel 1:enableu_port->OUT_b.CS2_N = 1u; //ouput value

CS2_N就是P13腳的一個復用功能之一,這樣就把P13配置為普通GPIO,輸出模式,初始輸出高電平
在這里插入圖片描述
相關配置在文檔Ranger-4 user manual里,注釋是簡寫
在這里插入圖片描述
這里提一下開發需要的文檔如下
在這里插入圖片描述

5、

	/*--- Init timer GPT0 ---*/uint32_t periodInUs = 500000u;u_timers->TIMERS_TIMER0_PRESCALER_REG_b.TIMER0_PRESCALING_VALUE = 1u; //定時器時鐘預分頻系數u_timers->TIMERS_MODE_REG = 0u; //0:single shot 1:free runningu_timers->TIMERS_INT_SET_ENABLE_REG = 1u; //0:no effect 1:enable INTu_timers->TIMERS_MODE_REG = 1u;

這里很奇怪的一點是TIMERS_MODE_REG 配置了兩次,把u_timers->TIMERS_MODE_REG = 0u;注釋掉也不影響。
同樣相關配置在文檔Ranger-4 user manual里
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

6、

uint32_t halfPeriod = periodInUs / 2000u; //250uint8_t preScaler = 1u;uint32_t sysCoreClock = phscaAppHal_GetSystemCoreClock() / 1000u; //55200uint32_t timerRegCount = halfPeriod * (sysCoreClock / preScaler); //13800000, 55200000 / 13800000 = 4,即1秒可以記4次,記一次需要250MS,即250MS進一次中斷u_timers->TIMERS_TIMER0_TIMEOUT_REG = timerRegCount; //計數值

如果想要500MS,簡單做法可以在讓timerRegCount * 2

在這里插入圖片描述
在這里插入圖片描述

7、
NVIC_EnableIRQ(IRQ19_Timer0_IRQn);
定時器中斷向量在startup_NCJ29D5_user.s里面可以看到

8、

__attribute__ ((interrupt ("IRQ")))
void IRQ19_Timer0(void)
{u_port->OUT_b.CS2_N = !u_port->OUT_b.CS2_N;u_timers->TIMERS_INT_CLR_STATUS_REG = 1u; //0:no effect 1:clear timer0 timeout interrupt
}

在這里插入圖片描述

到此這個例程結束。

沒找到相關文檔前,看這些代碼還是有點懵的,有文檔后就清晰了。

全部代碼

/*(c) NXP B.V. 2020. All rights reserved.Disclaimer1. The NXP Software/Source Code is provided to Licensee "AS IS" without anywarranties of any kind. NXP makes no warranties to Licensee and shall notindemnify Licensee or hold it harmless for any reason related to the NXPSoftware/Source Code or otherwise be liable to the NXP customer. The NXPcustomer acknowledges and agrees that the NXP Software/Source Code isprovided AS-IS and accepts all risks of utilizing the NXP Software underthe conditions set forth according to this disclaimer.2. NXP EXPRESSLY DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING,BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT OF INTELLECTUAL PROPERTYRIGHTS. NXP SHALL HAVE NO LIABILITY TO THE NXP CUSTOMER, OR ITSSUBSIDIARIES, AFFILIATES, OR ANY OTHER THIRD PARTY FOR ANY DAMAGES,INCLUDING WITHOUT LIMITATION, DAMAGES RESULTING OR ALLEGED TO HAVERESULTED FROM ANY DEFECT, ERROR OR OMISSION IN THE NXP SOFTWARE/SOURCECODE, THIRD PARTY APPLICATION SOFTWARE AND/OR DOCUMENTATION, OR AS ARESULT OF ANY INFRINGEMENT OF ANY INTELLECTUAL PROPERTY RIGHT OF ANYTHIRD PARTY. IN NO EVENT SHALL NXP BE LIABLE FOR ANY INCIDENTAL,INDIRECT, SPECIAL, EXEMPLARY, PUNITIVE, OR CONSEQUENTIAL DAMAGES(INCLUDING LOST PROFITS) SUFFERED BY NXP CUSTOMER OR ITS SUBSIDIARIES,AFFILIATES, OR ANY OTHER THIRD PARTY ARISING OUT OF OR RELATED TO THE NXPSOFTWARE/SOURCE CODE EVEN IF NXP HAS BEEN ADVISED OF THE POSSIBILITY OFSUCH DAMAGES.3. NXP reserves the right to make changes to the NXP Software/Sourcecode anytime, also without informing customer.4. Licensee agrees to indemnify and hold harmless NXP and its affiliatedcompanies from and against any claims, suits, losses, damages,liabilities, costs and expenses (including reasonable attorney's fees)resulting from Licensee's and/or Licensee customer's/licensee's use of theNXP Software/Source Code.
*//*** @file* @brief NCJ29D5 Blinky LED App*/
#include <stdbool.h>
#include <stdint.h>// Include NCJ29D5_user.h (rename SPI controller's "EOF" field to "SPI_EOF" to avoid
// clash with EOF macro from stdio.h)
#define EOF SPI_EOF
#include <NCJ29D5_user.h>
#undef EOF#include <stdio.h>
#include <phIscaBaseband.h>
#include <phIscaUtilities.h>
#include <phIscaAppHal.h>
#include <phscaTools.h>
#include <phscaLinFlex.h>int main(void)
{//系統選擇外部晶振,時鐘頻率為55.2MhzphscaAppHal_Init(PHSCA_APPHAL_XO_CLOCK_SOURCE_55P2Mhz);/* Stop Watchdog timer for debugging purpose */phscaUtilities_WdtResetWithMS(0u);/*--- Init baseband to enable the LDOs to power VDD_GLOB for LEDs ---*//** 55.2M+xoClkDivderSet:0+hwAcceleratorCfg:0(software encoder) -->rfpllRxTime:75  rfpllTxTime:180*/phIscaBaseband_Config_t gphscaRciAppConfig_Static ={.Control_b.xoClockSel = PHSCA_BB_XO_CLOCK_SOURCE_55P2Mhz, //55.2M.Control_b.xoClkDivderSet = 0u,.Control_b.hwAcceleratorCfg = 0u,};uint16_t rfpllRxTxTime[2] = {0u, 0u};/* Update rfpll tx and rx rampup time in RciConfiguration */phscaAppHal_GetRfpllRxTxRampupTime(gphscaRciAppConfig_Static.Control_b.hwAcceleratorCfg,gphscaRciAppConfig_Static.Control_b.xoClkDivderSet,&rfpllRxTxTime[0u], &rfpllRxTxTime[1u]);gphscaRciAppConfig_Static.Control_b.rfpllRxTime = rfpllRxTxTime[0u];gphscaRciAppConfig_Static.Control_b.rfpllTxTime = rfpllRxTxTime[1u];/* Init Baseband */phscaBaseband_Init(gphscaRciAppConfig_Static);/* Turn on crystal *//**When set to 1, the crystal oscillator is selected as input of the output buffer driving the XTAL_OUT pin.*If set to 0, the XTAL_OUT configuration is not altered*/phscaAppHal_XoOn(false);/* Init UART */phscaLinFlex_UartInit(PHSCA_LINFLEX_UART_BAUD_115200);printf("\r\n--- Blinky LED ---\n\r");/*--- Init P13 (CS2_N) as GPIO ---*/u_port->ALTF_b.CS2_N = 0u; //CS2_N as GPIOu_port->DIR_b.CS2_N = 1u; //0:input 1:outputu_port->PUD_b.CS2_N_PU = 1u; //0:disabel 1:enableu_port->PUD_b.CS2_N_PD = 0u; //0:disabel 1:enableu_port->OUT_b.CS2_N = 1u; //ouput value/*--- Init timer GPT0 ---*/uint32_t periodInUs = 500000u;u_timers->TIMERS_TIMER0_PRESCALER_REG_b.TIMER0_PRESCALING_VALUE = 1u; //定時器時鐘預分頻系數//u_timers->TIMERS_MODE_REG = 0u; //0:single shot 1:free runningu_timers->TIMERS_INT_SET_ENABLE_REG = 1u; //0:no effect 1:enable INTu_timers->TIMERS_MODE_REG = 1u;uint32_t halfPeriod = periodInUs / 2000u; //250uint8_t preScaler = 1u;uint32_t sysCoreClock = phscaAppHal_GetSystemCoreClock() / 1000u; //55200uint32_t timerRegCount = halfPeriod * (sysCoreClock / preScaler); //13800000, 55200000 / 13800000 = 4,即1秒可以記4次,記一次需要250MS,即250MS進一次中斷u_timers->TIMERS_TIMER0_TIMEOUT_REG = timerRegCount; //計數值printf("Timer Reg Counter = %i\n\r",timerRegCount);NVIC_EnableIRQ(IRQ19_Timer0_IRQn);while(1){}
}__attribute__ ((interrupt ("IRQ")))
void IRQ19_Timer0(void)
{u_port->OUT_b.CS2_N = !u_port->OUT_b.CS2_N;u_timers->TIMERS_INT_CLR_STATUS_REG = 1u; //0:no effect 1:clear timer0 timeout interrupt
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/374138.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/374138.shtml
英文地址,請注明出處:http://en.pswp.cn/news/374138.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

你要看透的56條人生哲理

當你躊躇不前、站在人生十字路口時候&#xff0c;這56條哲理或許能助你一臂之力&#xff01;      1&#xff0e;拿得起&#xff0c;放得下      我們每個人都有很多“寶貝”&#xff0c;但你不可能什么都得到&#xff0c;在某些時候一定要學會拿得起&#xff0c;放得下…

使用Spring和Java泛型簡化數據訪問層

1.概述 本文將著重于通過對系統中的所有實體使用單個通用的數據訪問對象來簡化DAO層 &#xff0c;這將導致優雅的數據訪問 &#xff0c;而不會造成不必要的混亂或冗長。 2. Hibernate和JPA DAO 大多數生產代碼庫都有某種DAO層。 通常&#xff0c;實現范圍從沒有抽象基類的多個…

強肝保肝養肝4大食物

“強肝的食物,保肝的食物有哪些,養肝的食物有哪些”如果您對這些食物不了解不明白。那就看看專家為您推薦的四款強肝保肝養肝的食物。荔枝&#xff08;供圖/華蓋&#xff09;一、是荔枝&#xff0c;荔枝可以保肝&#xff0c;對肝有好處根據《本草綱目》記載荔枝有強肝健胰的效果…

如何查看注解實現_該怎么運用注解呢?Java團隊元老有話說

來源 | 異步 15講能學好誕生24年的JAVA嗎&#xff1f;你當然會感到懷疑&#xff0c;眾所周知&#xff0c;在技術向的IT論壇上&#xff0c;“如何在十天之內快速掌握好Java&#xff1f;”這類問題&#xff0c;往往會招來嘲笑。來源于知乎但在當下&#xff0c;5分鐘能看完一部電影…

NXP S32K144開發(一)環境搭建和新建工程

1、首先需要安裝S32 Design Studio for ARM&#xff0c;在NXP官網可以搜索到&#xff0c;這玩意也是基于eclipse的 安裝好后就可以打開了。 2、新建工程 過程可以參考NXP官網&#xff1a; https://www.nxp.com/document/guide/get-started-with-the-s32k144evb:NGS-S32K144E…

首先記錄異常的根本原因

Logback日志庫的0.9.30版本帶來了一個很棒的新功能&#xff1a;從根&#xff08;最內部&#xff09;異常而不是最外部異常開始記錄堆棧跟蹤。 當然&#xff0c;我的興奮與我貢獻了此功能無關。 用塞西爾德米勒&#xff08;Cecil B. de Mille&#xff09; 的話來解釋&#xff1a…

成功醒言

成功醒言 C01 只有敢犯錯誤的人才能成事&#xff1b; 只有不犯同樣錯誤的人才能成大事。 C02 固執≠執著&#xff1b; 幻想≠希望。 固執是無目標的執著&#xff1b; 執著是有目標的固執。 幻想是無法兌現的希望&#xff1b; 希望是有望實現的幻想。 固執地執著幻想&#xf…

Android 中的 Service 全面總結

1、Service的種類 按運行地點分類&#xff1a; 類別區別 優點缺點 應用本地服務&#xff08;Local&#xff09;該服務依附在主進程上&#xff0c; 服務依附在主進程上而不是獨立的進程&#xff0c;這樣在一定程度上節約了資源&#xff0c;另外Local服務因為是在同一進程因此不…

python基礎學習1-三元表達式和lambda表達式

#!/usr/bin/env python # -*- coding:utf-8 -*- 三元運算 if else 的簡寫name "alex" if 11 else "SB" #如果條件成立 賦alex 否則 賦SB print(name)#--------------lambda表達式 f2 lambda a1,a2:a1a2100 #等價 下邊函數定義 def f1(a1,a2): return …

怎么讓存儲過程通用化_怎么做分布式存儲的面試?

cholerae 大神已經做了詳細回答&#xff0c;http://zenlife.tk/interview-for-distributed-storage.md寫于幾年前&#xff0c;內容有點稚嫩&#xff0c;WAL辨識度很高, 其他問題一般.CAP不會再問了&#xff0c;專業的存儲文獻中很少(幾乎不)提及CAP或PACELC, 這個詞用于市場和銷…

Java EE中的配置管理

我嘗試配置管理在云計算中具有很多相關性 爭論 較早。 實際上&#xff0c;我大膽地宣稱配置管理是任何認真嘗試從軟件中節省幾美元的基石。 那么什么是配置管理及其主要目標&#xff1f; 在不使事情變得過于復雜的情況下&#xff0c;我認為接下來的兩個目標與事實相差不遠。 以…

十年總結,一個JAVA人的十年人生路

十年總結-開篇&#xff1a;歇一歇&#xff0c;才能走的更遠經常見壇子里有人問&#xff0c;學習java該如何入手&#xff0c;或者是該學java還是學XX語言。我一直覺得&#xff0c;編程跟語言關系不大&#xff0c;重點是要有解決問題的思路。學習一門語言&#xff0c;其實只是尋求…

(四)Qt實現自定義模型基于QAbstractTableModel (一般)

Qt實現自定義模型基于QAbstractTableModel 兩個例子 例子1代碼 Main.cpp #include <QtGui>#include "currencymodel.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);//數據源QMap<QString, double> currencyMap;currencyMap.insert(…

pt-query-digest使用介紹【轉】

本文來自&#xff1a;http://isadba.com/?p651 一、pt-query-digest參數介紹. pt-query-digest --useranemometer --passwordanemometerpass --review h192.168.11.28,Dslow_query_log,tglobal_query_review \--history h192.168.11.28,Dslow_query_log,tglobal_query_re…

python代碼模板_python 代碼模板

python中的Module是比較重要的概念。常見的情況是&#xff0c;事先寫好一個.py文 件&#xff0c;在另一個文件中需要import時&#xff0c;將事先寫好的.py文件拷貝 到當前目錄&#xff0c;或者是在sys.path中增加事先寫好的.py文件所在的目錄&#xff0c;然后import。這樣的做法…

Java并發教程–重入鎖

Java的synced關鍵字是一個很棒的工具–它使我們能夠以一種簡單可靠的方式來同步對關鍵部分的訪問&#xff0c;而且也不難理解。 但是有時我們需要對同步進行更多控制。 我們要么需要分別控制訪問類型&#xff08;讀取和寫入&#xff09;&#xff0c;要么使用起來很麻煩&#xf…

找出互聯網類似以下圖的實例

轉載于:https://www.cnblogs.com/sghcjy/p/4978851.html

python比較運算符重載_python運算符重載

1、打印操作會首先嘗試__str__和str內置函數&#xff0c;他通常返回一個用戶友好顯示。__repr__用于所有其他環境&#xff0c;用于交互式模式下提示回應以及repr函數&#xff0c;如果沒有使用__str__&#xff0c;則會使用print和str。它通常返回一個編碼字符串&#xff0c;可以…

使用Spring MVC開發Restful Web服務

REST簡介 摘自Wikipedia&#xff1a; REST風格的體系結構由客戶端和服務器組成。 客戶端向服務器發起請求&#xff1b; 服務器處理請求并返回適當的響應。 請求和響應圍繞資源表示的傳遞而構建。 資源本質上可以是可以解決的任何連貫且有意義的概念。 正如您所閱讀的&#xff0…

深入Java核心 Java內存分配原理精講

深入Java核心 Java內存分配原理精講 Java內存分配與管理是Java的核心技術之一&#xff0c;之前我們曾介紹過Java的內存管理與內存泄露以及Java垃圾回收方面的知識&#xff0c;今天我們再次深入Java核心&#xff0c;詳細介紹一下Java在內存分配方面的知識。一般Java在內存分配時…