Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
Rev.G Vybrid Tower 主板的非官方用户手册。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Rev.G Vybrid Tower 主板的非官方用户手册。 (如果加载不正确,请跳过第 1 页 - 那里只有标题。) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Rev.G Vybrid Tower 主板的非官方用户手册。 (如果加载不正确,请跳过第 1 页 - 那里只有标题。) OpenSDA 塔板 VF6xx
記事全体を表示
例MPC5607B PinToggleステーショナリー CW210 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ******************************************************************************** * 詳細説明: *アプリケーションは基本的な初期化を実行し、PLLを最大許容周波数に設定します。 *割り込みによって1つのLEDを点滅させて割り込みを初期化します。 * UART端末からECHO端末まで初期化・表示通知を行います。 * ------------------------------------------------------------------------------ ※テストHW:XPC5607B 176LQFP、EVB MOTHEBOARD Rev.C XPC56XX * MCU:             PPC5607BMLUAM03Y * Fsys:64/48 MHz * Debugger:      Lauterbach Trace32 *                      PeMicro USB-ML-PPCNEXUS *対象:RAM、internal_FLASH *端末:19200-8-パリティなし-1ストップビット-LINFLEX_0のフロー制御なし * EVB接続:デフォルト * ******************************************************************************** 全般
記事全体を表示
使用 26MHz XTAL 操作 KW36 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 默认情况下,FRDM-KW36 板包含一个 32MHz XTAL (YI),如图1所示,但在某些情况下,FRDM-KW36 或定制 KW36 板需要 26MHz XTAL 而不是 32MHz XTAL。   图 1.FRDM-KW36 原理图上的 32MHz XTAL 无线连接演示来自 FRDM-KW36 软件开发套件默认配置为使用 32MHz XTAL 运行,但可以很容易地修改软件以使用 26MHz XTAL 运行。 按照以下步骤配置 FRDM-KW36 无线连接演示,以使用 26MHz XTAL 进行操作: 1.在clock_config.h中文件中,将BOARD_XTAL0_CLK_HZ定义从32000000U更改为26000000U ,如图2所示。   图 2. BOARD_XTAL0_CLK_HZ 在 clock_config.h 中定义 2.在预处理器中添加RF_OSC_26MHZ=1行: 如果使用 IAR IDE: 右键单击您的项目,然后单击选项(图 3 )。 图 3. IAR 项目选项 转到 C/C++ 编译器选项卡,然后是预处理器,并在定义符号窗口中添加 RF_OSC_26MHZ=1 行(图 4 )。 图 4. IAR 预处理器 如果使用 MCUXpresso IDE: 右键单击您的项目,选择属性,转到 C/C++ Build 下的设置,然后转到 MCU C Compiler 下的预处理器(图 5 )。 图 5. MCUXpresso 预处理器 点击定义符号中的添加按钮,写入RF_OSC_26MHZ=1,点击确定完成(图6 )。 图 6.MCUXpresso 定义的符号 最后,重新编译您的项目,它就可以使用 26MHz XTAL 进行操作了。 FRDM-KW36 SDK 可以从MCUXpresso 网页下载。 BLE软件 千瓦
記事全体を表示
RT1050 のさまざまなメモリの起動時間 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 私が取り組んだ小さなプロジェクトは、RT1050の起動がさまざまなメモリタイプからどのように実行されるかを理解することでした。SDK の LED_blinky コードをベースラインとして使用し、EVKB ボードでいくつかのテストを実行しました。私が収集したデータと、より詳細なテスト手順を以下に説明します。 テスト手順 起動時間は、プロセッサが最初に電力を受け取る時間から、main() 関数からコードの最初の行を実行するまでの時間として定義されます。 オシロスコープ(Tektronix TDS 2014)を使用して、POR_B*信号の立ち上がりエッジから次の2点までの時間を測定しました。 FlexSPI_CSアサート(ROMによるFlexSPIの最初の読み取り)** GPIOアプリケーションコード内のトグル(コード実行の開始を通知します)。 *POR_B信号は、ヘッダーJ26-1を介してスコープに使用できました **FlexSPI_CS信号は、ボード上の小さなプルアップ抵抗R356を介して利用できます。この抵抗器の横に細いワイヤーをはんだ付けし、オシロスコープでプローブしました。 使用されたGPIOピンは、USER_LEDに接続したものと同じものでした(アクティブロー)。このピンは、ヘッダー J22-5 を介してスコープを設定できます。 TP 2、3、4、および5は、オシロスコープのプローブを接地するために使用されます。これはすべてEVKB評価ボードで行われました。 ここでは、テストの実行に関する注目すべき点をいくつか紹介します。 このレポートでは、POR_B シグナルの上昇からコードの最初の行の実行までの時間を中心に強調しています。ただし、最初にボードに電源が供給されてからPOR_Bシステムが立ち上がるまでには時間があります。これはパワーエレクトロニクスの問題であり、ユーザーのアプリケーションや設計によって異なります。このため、このレポートではこれにあまり重点を置きません。 アプリケーションの最初の実際のコード行は、実際にはプロセッサのいくつかのピンを構成しています。これらのピンが実行された後にのみ、GPIOがローに切り替わり、オシロスコープで時間が取得されます。ただし、これらのコンフィギュレーション コード行は非常に高速に実行されるため、テストの時間は無視されます。 クロック構成 ブート可能なイメージは、3 つのケースすべてで RT1050 にフラッシュされました。その後、MCUXpresso で、デバッガーは "Attach Only" を true に設定して構成されました。次に、デバッグ セッションが起動され、プロセッサがコードの実行を終了した後、RT1050 リファレンス マニュアルの第 18 章「CCM ブロック図」に従って一時停止し、レジスタ値が読み取られました。 ブート構成: コアクロック (MHz) * FlexSPIクロック(MHz) SEMCクロック(MHz) FlexSPI 130 99 SDRAMの 396 130 99 SRAM 396 130 99 *コア クロック速度は、クロック速度を 8 で割った出力として clko1 を構成することでも検証されています。この周波数はオシロスコープを使用して測定され、396MHzであることが確認されました。 実績 チップ選択ピンまでの時間は、RT1050プロセッサから最初のフラッシュ読み取りが発生する瞬間を表します。GPIO 出力までの時間は、起動時間を表します。 予想通り、XiP Hyperflashは他のメモリよりも高速に起動します。SRAM メモリと SDRAM メモリは、実行可能メモリにコピーする必要がありますが、これには時間がかかり、起動が遅くなります。 以下のセクションでは、これらのテストがどのように実行されたか、およびHyperflash XiPが最速であると予想される理由について、より詳細に説明します。 ハイパーフラッシュXiPの起動 以下は、Hyperflash XiPの起動プロセスがどのようになるかの手順の概要です。 パワーオンリセット(J26-1) フラッシュメモリへのアクセス開始(FlexSPI_SS0) フラッシュでインプレース実行(XiP) コードの最初の行が実行されます (USER_LED) MCUXpresso では、マップ ファイルには次のものが表示されていました。 オシロスコープの画像は次のとおりです。   SDRAM の起動 プロセッサはROMから起動し、シリアルNORフラッシュメモリからSDRAMにアプリケーションイメージをコピーするように指示されます(シリアルNORフラッシュはハイパーフラッシュ通信を使用します)。RT フラッシュローダ ツールを使用すると、アプリケーションをフラッシュにロードして、メモリを SDRAM にコピーして実行するように設定できます。   SDRAM へのコピーは、コピー アクション全体を実行する必要があるため、Hyperflash からインプレースで実行するよりも遅くなることが予想されます。 SDRAM の起動プロセスは次のようになります。 パワーオンリセット(J26-1) フラッシュメモリへのアクセス開始(FlexSPI_SS0) SDRAMへのコードのコピー SDRAMでインプレース実行(FlexSPI_SS0) コードの最初の行が実行される (USER_LED) MCUXpresso では、マップ ファイルには次のものが表示されていました。   このテストを実行するために、私は次の手順に従い ました: https://community.nxp.com/docs/DOC-340655. SRAMの起動 SRAMについては、SDRAMと同様の処理が予想されます。プロセッサは最初に内部ROMから起動し、次にHyperflashに移動します。次に、Hyperflashから内部SRAM DTCメモリにすべてをコピーし、そこから実行します。 SRAM の起動プロセスは次のとおりです。 パワーオンリセット(J26-1) フラッシュメモリへのアクセス開始(FlexSPI_SS0) SRAMへのコードのコピー SRAMでインプレース実行(FlexSPI_SS0) コードの最初の行が実行される (USER_LED)   MCUXpresso では、マップ ファイルには次のものが表示されていました。   このドキュメントは、次の議論から作成されました: javascript:; i.MXRT 105倍
記事全体を表示
将 Kinetis 中断从 CodeWarrior 移植到 KDS <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 最近我收到了两个来自 Kinetis 用户的案例。在将 Kinetis Interrupt 项目从 CodeWarrior 10.x 移植到 KDS 时,他们都遇到了问题。KDS 安装文件夹下有一个文档 KDS_Porting_Guide.pdf,其中涵盖了该主题。然而我知道许多客户即使按照文档步骤操作仍然遇到困难。这种情况很正常;因为用户的项目多种多样,我们不能指望一个移植文档就能解决个人的所有问题。对我来说,老实说,我很少使用这个移植指南来移植我的项目。我更喜欢手动移植我的项目。这样我就可以从上到下了解我的项目的变化。这样即使我稍后遇到问题,我仍然可以轻松快速地定位它。 由于时间原因,在本文中,我将重点介绍如何手动将 Kinetis Interrupt 从 CodeWarrior 移植到 KDS。 CodeWarrior 和 KDS 中的一些 NVIC 寄存器定义名称和文件结构不同。一个很大的区别是 KDS 直接使用来自 ARM 有限公司的核心文件。我将差异总结如下表。在开始移植之前最好先了解一下基本的区别。       CodeWarrior KDS NVIC寄存器定义:   其中 MCU 头文件。 Eg: MK60N512VMD100.h ARM 核心文件。 例如:core_cm4,core_cm0plus.h 作者 NXP(原飞思卡尔) ARM有限公司 使用示例 NVICISERx = 0x01 NVIC->ISER[x] = 0x01 封装在 NVIC_EnableIRQ(n) 中 向量表定义: 其中 Kinetis_sysinit.c 启动_MK60D10.S 语言使用 C 组装 中断处理程序名称 由用户定义 由KDS定义。 例如,PORTA_IRQHandler 允许用户修改。 更多信息请参见附件。
記事全体を表示
MCU 101:脉冲宽度调制 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 脉冲宽度调制(PWM)是机器人技术中用于控制电机和伺服器的技术。通过使用内部计数器,微控制器调节方波的占空比来控制输送到设备的电量。占空比是指方波“开启”的时间与重复信号周期的比例。占空比越高,信号承载的功率就越高。占空比以信号“开启”时间的百分比来表示,100% 表示持续开启。 配置计时器 PWM 信号的生成基于寄存器值和自由运行硬件计数器之间的硬件比较。定时器模块以输出比较电路的形式提供类似的硬件比较。寄存器的内容不断与主自由运行定时器进行比较。当匹配发生时,可以配置硬件输出事件,然后中断可以调用服务例程。 Timer I/O 定时器 I/O 端口控制寄存器位于端口集成模块 (PIM) 中。每个端口可以逐个引脚配置,每个定时器输入捕获/输出比较通道都与一个引脚关联。复位时,定时器模块将被禁用,相应的 I/O 端口默认为高阻抗输入。引脚的初始状态可以通过在数据方向寄存器 (DDRT) 中将相应的通用 I/O 引脚配置为输出,并将端口数据寄存器 (PTx) 写入相应的状态来定义。复位期间需要外部上拉设备来控制电平。设置定时器系统控制寄存器 (TSCR1) 中的定时器使能 (TEN) 位可启用定时器模块。在默认模块复位状态下,输出比较功能被禁用。在此模式下,数据方向位 (DDRTx) 控制引脚的 I/O 状态,而输入比较逻辑则监控引脚上的转换。设置定时器输入捕获/输出比较选择 (TIOS) 寄存器中的相应位可启用定时器通道进行输出比较,以满足 PWM 生成的需求。在输出比较模式下,定时器控制寄存器 (TCTL1/2) 中的输出模式 (OMn) 和输出电平 (OLn) 位可同时选择比较事件操作,并启用输出比较输出逻辑与相关引脚的连接。如果某个通道的 OMn:OLn 控制位均为零,则 DDRTx 和 PTx 位将控制 I/O 引脚的状态。设置 OMn:OLn 位中的任一个(或两个)位会将输出比较电路连接到该引脚,从而覆盖 DDRTx 和 PTx 的设置。复位后,每个输出比较电路的输出状态均为零。 对于 PWM 生成,设置 OM 位 (= 1),以便输出比较输出遵循每个比较事件上相关 OL 位的状态。每次处理定时器通道中断时,OL 位的状态都会反转,以产生切换输出。清除或设置 TEN 位分别禁用或启用定时器模块,但不会修改任何其他定时器控制寄存器的内容或输出比较输出逻辑的状态 配置定时器模块用于PWM时,需要考虑许多因素。从高层角度来看,主要考虑以下几点: • PWM 频率 • PWM 占空比 为了产生所需的 PWM 频率,必须知道总线时钟频率,并且必须设置定时器预分频器。这些值取决于产生的 PWM 频率范围和 PWM 信号的分辨率。最大分辨率和 PWM 频率受最大定时器时钟频率限制。较低的 PWM 频率受到最小定时器时钟频率的限制。这有时会导致权衡,可以按照图 1 所示进行评估。 配置定时器通道后,即可使用定时器通道中断生成 PWM 信号。应配置中断服务例程 (ISR),将适当的比较值(标记或空间)加载到定时器比较寄存器中。具体实现方式如下:识别上一个操作是下降沿跳变还是上升沿跳变,切换跳变状态并加载比较寄存器。 下一个合适的值。只需在连续的ISR函数调用中将连续的标记值和空间值添加到定时器比较寄存器,即可避免对主定时器计数寄存器的引用,如图3所示。使用无符号整数加法时,定时器的翻转是无缝的。使用前一个比较值作为生成下一个比较值的参考,即使ISR延迟可能发生变化,也能实现精确的输出时序。 启动PWM是一项需要仔细考虑的任务。为了使用中断启动PWM生成,需要手动配置第一个比较事件。需要配置强制比较,即设置比较值将输出引脚切换到第一个过渡状态。初始比较事件之后,中断将处理PWM生成。HCS12不支持硬件强制比较,但可以通过将正常比较值设置为比当前自由运行定时器值提前几个周期来配置强制比较。这些周期是必要的,以补偿MCU内部的延迟。周期数将根据内核和模块时钟而变化。停止PWM生成时,务必考虑矮脉冲(宽度小于规定的标记或空比的脉冲,具体视情况而定)。为了避免这些脉冲,请在相关的中断服务程序中设置适当的本地中断掩码来禁用PWM生成。可以通过在ISR的任一部分禁用中断来设置引脚在停止时的适当状态;上升沿 或下降沿部分。 附加教程资源: (在 “我的视频” 中查看) (在 “我的视频” 中查看) (在 “我的视频” 中查看) 直流电机控制简介 - 第二部分 讲座 2:脉冲宽度调制 飞思卡尔杯内容
記事全体を表示
感应传感器节点 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Overview 特性 结构框图 电路板 设计资源 Overview 感应传感器节点参考设计拥有一种紧凑的外形尺寸、开源设计。 借助它,基于Thread和ZigBee等IEEE 802.15.4协议的低功率节点能够将数据传送到无线传感器网络。 恩智浦采用以下工具和软件完善了Kinetis KW2xD,包括硬件评估和开发板、软件开发IDE和演示应用与驱动器。 特性 MKW24D512 802.15.4 Kinetis MCU 完全符合IEEE 802.15.4的Thread网络无线节点 集成PCB的弯曲水平天线 2个中断按钮开关(LLWU) 1 FXOS87000CQ Combo sensor 1个纽扣电池座 1 EEPROM 1个电池充电器 结构框图 电路板 设计资源 传统设计
記事全体を表示
TWR-SER2 と TWR-K70F120M for Ethernet の併用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> MQXおよびRTCSを実行するTWR-K70F120Mは、TWR-SER2のデュアルPHYと連携できます。以下に、デフォルトのBSPに加えた変更を示します。 1)phy_dp83xxx.cを追加しますおよびphy_dp83xxx.hbsp_twrk70f120mビルドプロジェクトに追加します。これらのファイルは、/mqx/source/io/enet/Phy に MQX と共にあります 2) イーサネット MACNET に DP83xxx PHY を使用するように BSP を変更します。 /mqx/source/bsp/twrk70f120m/init_enet.c で、次の操作を行います。 #include 「phy_dp83xxx.h」 定数 ENET_IF_STRUCT ENET_0 = {      &MACNET_IF,      //&phy_ksz8041_IF,      &phy_dp83xxx_IF, MACNET_DEVICE_0、 MACNET_DEVICE_0、 BSP_ENET0_PHY_ADDR、 BSP_ENET0_PHY_MII_SPEED }; 3) MDIO ラインには、DP83849I データシートに従って外部プルアップ抵抗が必要です。現時点では持っていなかったので、MCUピンPTB0の内部プルアップを有効にします。 /mqx/source/bsp/twrk70f120m/init_gpio.c で、次のようにします。 //pctl->PCR[0] = PORT_PCR_MUX(4) | PORT_PCR_ODE_MASK; /* PTB0, RMII0_MDIO/MII0_MDIO   */ /* PTB0, RMII0_MDIO/MII0_MDIO   */ /* MDIOで内部プルアップが有効 */ pctl->PCR[0] = PORT_PCR_MUX(4) | PORT_PCR_ODE_MASK | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK; これらの変更により、RTCSアプリケーションはTWR-SER2デュアルPHYチャネルAで動作します。 TWR-SER2 では、J8 と J9 はアン シャントされ、SW1 = 11000000、SW2 = 10100000 です。 TWR-SER2 U504 50 MHz 出力から 50 MHz クロック ソースを使用しているため、TWR-K70F120M では J18 は 50 MHz OSC を無効にするように構成されています。このクロックは、MCU (EXTAL) およびデュアル PHY X1 入力 (RMII 基準クロック) の基準クロックを提供するために使用されます。 リアルタイムTCPIP通信スイート Re: TWR-SER2 と TWR-K70F120M for Ethernet の使用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはハフィズ、 私は、TWR-SERおよびTWR-SER2カードをMQX4.1イーサネット・アプリケーションとともに、TWR-K70F120M用に独立して使用することに成功しました。一度に 1 つのタワー シリアル カードのみを使用し、両方のカードを同時に使用しないでください)。 TWR-SERとTWR-SER2はどちらもRMIIを実行し、それぞれのTWR-SER(2)カードのクロック・ソースを使用して、イーサネットPHYとクロック・ドメインを同期するMCUの両方にクロックを供給しています。 カードを交換して、同じアプリケーションコードを実行するだけです。 TWR-SER2 カードを使用する場合は、イーサネット ポート (ETH_A/J12) の 1 つだけを使用します。 よろしくお願いします。 David Re: TWR-SER2 と TWR-K70F120M for Ethernet の使用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi TWR-K53N512 の BSP で動作させるようにしましたが、上記のジャンパー設定に加えて、手順 3 で説明した変更を適用しました。 ありがとう、そしてよろしくお願いします。 Kan Re: TWR-SER2 と TWR-K70F120M for Ethernet の使用 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi TWR-SER ボードで TWR-SER のイーサネット ドライバを正常に実行しましたがK70F120M TWR-SER2 では動作しませんでした。 1. シングル/デュアル RMII モードのイーサネット デバイスは、TWR-K70F120M の TWR-SER2 ボードでサポートされていますか。この リンクによると、(Line:241)はサポートされていませんか? 2. サポートされている場合、TWR-SERボードと比較して、(MDC、MDIO、CRS_DV、RXDn、RXErr、TXDn、TXEN、RMII_REF_CLK)などの信号設定に変更はありますか? よろしくお願いします。
記事全体を表示
Kinetisの便利なドキュメント、ディスカッション、質問 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 次のドキュメントには、毎月の視聴回数に基づいてコミュニティに関連するドキュメント、質問、ディスカッションのリストが含まれています。KinetisプロセッサやMCUXpressoで問題や疑問がある場合、または使い始めている場合は、次のリンクをチェックして、次のドキュメントやディスカッションで疑問がすでに解決されているかどうかを確認してください。 MCUXpresso MCUXpresso対応デバイス一覧表 FAQ:MCUXpressoソフトウェアとツール  MCUXpressoおよびFRDM-K64F入門  ダウンロード可能な MCUXpresso SDK v.2 パッケージの生成  クイックスタートガイド – MCUXpresso SDKとPINの使用&CLOCKs コンフィグ ツール  Kinetis Design StudioからMCUXpresso IDEへの移行 Kinetisマイクロコントローラのガイドと例 FRDM-KL25ZでのRTCモジュールの使用  FRDM-K64Fを使用したベアメタルコード例 IAR EWARMを使用してフラッシュ設定フィールドをプログラムする FlexIO について  Kinetis K80 FAQ 方法:KSDK1.3 + WolfSSLを使用した電子メールクライアント(SMTP + SSL)をFRDM-K64Fに保護する  Kinetisブートローダによるネットワーク内の複数のデバイスのアップデート - Cortex-M0+用  FRDM-KL25z、FRDM-K64F、TWR-K60D100、TWR-K70のPIT-ADC-DMAの例  KinetisのUSBテザリング・ホスト(RNDISプロトコル)の実装 - KSDKを使用して携帯電話を使用してFreedom Boardにインターネット接続を提供する方法 内部フラッシュの書き込み/読み取り ハード障害の追跡  送信するpbufのチェーンを作成する方法は?UDP を使用してデータを送信します。  Kinetis Boot Loader for SREC UART, SD CARD AND USB-MSD LOADING (SREC UART、SD カード、USB-MSDローディング用)  小規模メーカーなどのUSB VID / PID番号  Open SDAとFreeMaster OpenSDAv2の  Windows 10で報告されたFreedom OpenSDAファームウェアの問題 まずはFreeMASTERから始めましょう!  Kinetis Design Studio IDE(KDS IDE)は、現在積極的に開発されていないため、新しい設計には推奨されません。NXPのKinetis、LPC、および i.MX RT Cortex-Mベースのデバイスに推奨されるソフトウェア開発ツールチェーンとして、Kinetis Design Studio IDEは MCUXpresso IDEに置き換わりました。しかし、この文書は2019年になってもかなりの閲覧数を受け続けており、一部の人にとっては有用である可能性があります。 Kinetis Design Studio 新しいKinetis Design Studio v3.2.0を提供開始 Kinetis SDK v2.0でのKinetis Design Studio v3.xの使用  Kinetis Design StudioによるGDBデバッグ  KDS デバッグ構成 (OpenOCD、P&E、セッガー) KDS2.0でprintf()を使用してConsoleとUARTに文字列を印刷する方法  Kinetis Design Studio - KSDKプロジェクトでのC++の有効化  MK20DX256xxx7 と KDS および KSDK の併用  Kinetis SDK Kinetis SDK FAQ  Kinetis SDK v2のご紹介  方法: KSDK 2.0 をインストールする  KDS3.0 で初めての KSDK1.2 アプリケーションの作成 - Hello World と GPIO 割り込み付きトグル LED  Freedom開発プラットフォーム Kinetis Eシリーズ・マイクロコントローラ Kinetis EAシリーズMCU Kinetisハードウェア・サポート Kinetis KシリーズMCU Kinetis Lシリーズ・マイクロコントローラ Kinetis Mシリーズ・マイクロコントローラ Kinetis Vシリーズ・マイクロコントローラ Kinetis Wシリーズ・マイクロコントローラ USB
記事全体を表示
FRDMSTBC-A8471 - ベアメタルのサンプル・プロジェクト ねえ皆さん このドキュメントでは、最近リリースされた FRDMSTBC-A8471 開発ボード と NXP FXLS8471Q 3 軸リニア加速度計用に作成した簡単なベアメタルの例コードについて説明します。このボードはほとんどの NXP Freedom開発ボード と互換性があり、最も人気のあるものの1つである FRDM-KL25Zを使用することにしました。FreeMASTERツールは、SPIインターフェースを介した割り込み手法を使用して、FXLS8471Qから読み取られた加速度データを視覚化するために使用されます。このボードをサポートする Sensor Toolboxソフトウェア と Intelligent Sensing Framework (ISF)については説明しません。 このサンプルでは、次のことを示しています。 1. MKL25Z128 MCU(主にSPIおよびPORTモジュール)の初期化。 2. SPIデータの書き込みおよび読み取り操作。 3.最高の解像度を達成するためのFXLS8471Qの初期化。 4. AN4069に基づく簡単なオフセットキャリブレーション。 5. 割り込み技術を使用してデータを読み出して出力します。 6. レジスタ0x01 – 0x06からの出力値をg単位の実際の加速度値に変換します。 7. FreeMASTERツールでの出力値の視覚化。     1.FRDMSTBC-A8471/FRDM-KL25Zの回路図と下の画像からわかるように、SPI信号はKL25Z MCUのSPI0モジュールにルーティングされ、INT1出力はPTD4ピンに接続されています。PTD0ピン(チップセレクト)はSPI0モジュールによって自動的に制御されないため、汎用出力として構成されています。FXLS8471QのINT1出力はプッシュプルアクティブLOW出力として構成されているため、対応するPTD4ピン構成は、立ち下がりエッジに割り込みを持つGPIOです。コア/システム・クロック周波数は20.97MHz、SPIクロックは524.25kHzです。     したがって、MCUは次のように構成されます。   /****************************************************************************** *MCU初期化機能 ******************************************************************************/ void MCU_Init(void) { SPI0モジュールの初期化 SIM_SCGC4 |= SIM_SCGC4_SPI0_MASK;SPI0モジュールへのクロックをオンにします SIM_SCGC5 |= SIM_SCGC5_PORTD_MASK;ポートDモジュールへのクロックをオンにします PORTD_PCR1 = PORT_PCR_MUX(0x02);PTD1ピンはSPI0 CLKライン PORTD_PCR2 = PORT_PCR_MUX(0x02);PTD2ピンはSPI0 MOSIライン PORTD_PCR3 = PORT_PCR_MUX(0x02);PTD3ピンはSPI0 MISOライン PORTD_PCR0 = PORT_PCR_MUX(0x01);PTD0ピンはGPIOとして構成されています(CSラインは手動で駆動されます) GPIOD_PSOR |= GPIO_PSOR_PTSO(0x01);PTD0 = 1 (CS 非アクティブ) GPIOD_PDDR |= GPIO_PDDR_PDD(0x01);PTD0ピンはGPIO出力   SPI0_C1 = SPI_C1_SPE_MASK | SPI_C1_MSTR_MASK; // Enable SPI0 module, master mode SPI0_BR = SPI_BR_SPPR(0x04) |SPI_BR_SPR(0x02);ボーレート = バスクロック / ((SPPR+1) * 2^(SPR+1)) = 20970000 / ((4+1) * 2^(2+1)) = 524.25 kHz PTD4ピン(FXLS8471QのINT1に接続)を立ち下がりエッジ割り込み用に構成します PORTD_PCR4 |= (0|PORT_PCR_ISF_MASK|割り込みフラグをクリアする PORT_PCR_MUX(0x1)|PTD4 は GPIO として構成されています PORT_PCR_IRQC(0xA));PTD4 は立ち下がりエッジ割り込み用に構成されています NVICでPORTD割り込みを有効にする NVIC_ICPR |= 1 << ((INT_PORTD - 16)%32); NVIC_ISER |= 1 << ((INT_PORTD - 16)%32); } 2. FXLS8471Qは「モード0」SPIプロトコルを使用しており、クロック信号の非アクティブ状態がローであり、データはクロック信号のリーディングエッジでキャプチャされ、立ち下がりエッジで変更されます。 CSピンの立下がりエッジでSPI通信が開始されます。書き込み操作は、R/Wビットに1を送信することで開始されます。次に、8ビットレジスタアドレスADDR[7:0]が1番目と2番目のシリアル化されたバイトにエンコードされます。書き込まれるデータは、シリアル化された 3 番目のバイトから開始されます。ビットの順序は次のとおりです。 Byte 0: R/W, ADDR[6], ADDR[5], ADDR[4], ADDR[3], ADDR[2], ADDR[1], ADDR[0] Byte 1: ADDR[7], X, X, X, X, X, X, X Byte 2: DATA[7], DATA[6], DATA[5], DATA[4], DATA[3], DATA[2], DATA[1], DATA[0] CSピンの立ち上がりエッジはSPI通信を停止します。 以下は、CTRL_REG1(0x3A)に値0x3Dを書き込む書き込み操作です。   同様に、読み取り操作は、R/W ビットに 0 を送信することによって開始されます。次に、8ビットレジスタアドレスADDR[7:0]が1番目と2番目のシリアル化されたバイトにエンコードされます。データはMISOピンから読み取られます(MSBが最初に)。 以下のスクリーンショットは、WHO_AM_Iレジスタ(0x0D)から正しい値0x6Aを読み取る読み取り操作を示しています。 複数の読み取り操作は、1 つの読み取りと同様に実行されます。ただし、8 つの SCLK サイクルの倍数でバイトが読み取られる点が異なります。レジスタ アドレスは自動インクリメントされるため、次のクロック エッジの 8 つごとに次のレジスタの MSB がラッチされます。 レジスタ0x01から0x06への6バイトのバースト読み出しを以下に示します。また、加速度出力データを読み出すことでINT1ピンが自動的にクリアされる様子も示しています。 3. ダイナミックレンジを±2gに設定し、最高の分解能を実現するために、LNOISEビットを設定し、最低のODR(1.56Hz)と高分解能モードを選択します(詳細は AN4075を参照)。DRDY割り込みはイネーブルされ、プッシュプルのアクティブロー出力に設定されたINT1割り込みピンに送られます。 /****************************************************************************** * FXLS8471Q初期化機能 ******************************************************************************/ void FXLS8471Q_Init (void) { FXLS8471Q_WriteRegister(CTRL_REG2, 0x02);高解像度モード FXLS8471Q_WriteRegister(CTRL_REG3、0x00);プッシュプル、アクティブ LOW 割り込み FXLS8471Q_WriteRegister(CTRL_REG4、0x01);DRDY割り込みをイネーブルにする FXLS8471Q_WriteRegister(CTRL_REG5、0x01);INT1-PTD4 にルーティングされた DRDY 割り込み FXLS8471Q_WriteRegister(CTRL_REG1、0x3D);ODR=1.56Hz、ノイズの低減、アクティブモード } 4. AN4069 に準拠したシンプルなオフセットキャリブレーション方法が実装されています 。 /****************************************************************************** *簡単な加速度計オフセットキャリブレーション ******************************************************************************/ ボイドFXLS8471Q_Calibrate(ボイド) { 符号なし文字 reg_val = 0; while (!reg_val) // 最初のデータ セットを待ちます   { reg_val = FXLS8471Q_ReadRegister(STATUS_REG) & 0x08;   }    FXLS8471Q_ReadMultiRegisters(OUT_X_MSB_REG、6、AccData);データ出力レジスタの読み取り 0x01-0x06    Xout_14_bit = ((ショート) (AccData[0]<<8 |AccData[1])) >> 2;14ビットX軸出力値を計算 Yout_14_bit = ((ショート) (AccData[2]<<8 |AccData[3])) >> 2;14ビットY軸出力値を計算 Zout_14_bit = ((ショート) (AccData[4]<<8 |AccData[5])) >> 2;14ビットZ軸出力値を計算    Xオフセット= Xout_14_bit / 8 *(-1);X軸オフセット補正値を計算 Yオフセット= Yout_14_bit / 8 *(-1);Y 軸オフセット補正値の計算 Zoffset = (Zout_14_bit - SENSITIVITY_2G) / 8 * (-1);Z 軸オフセット補正値の計算    FXLS8471Q_WriteRegister(CTRL_REG1、0x00);オフセットレジスタへの書き込みを可能にするスタンバイモード FXLS8471Q_WriteRegister(OFF_X_REG, Xoffset); FXLS8471Q_WriteRegister(OFF_Y_REG, Yoffset); FXLS8471Q_WriteRegister(OFF_Z_REG, Zoffset);    FXLS8471Q_WriteRegister(CTRL_REG1、0x3D);ODR=1.56Hz、ノイズの低減、アクティブモード } 5. ISR では、割り込みフラグのみがクリアされ、新しいデータの到着を示すために DataReady 変数が設定されます。 /****************************************************************************** * PORT D 割り込みハンドラ ******************************************************************************/ void PORTD_IRQHandler() { PORTD_PCR4 |= PORT_PCR_ISF_MASK;割り込みフラグをクリアする データレディ = 1; } 6.加速度計レジスタ0x01〜0x06からの出力値は、最初に符号付き14ビット値に変換され、その後、g単位の実際の値に変換されます。 if (DataReady) // 新しいデータセットは準備ができていますか? { データレディ = 0; FXLS8471Q_ReadMultiRegisters(OUT_X_MSB_REG、6、AccData);データ出力レジスタの読み取り 0x01-0x06                                                  Xout_14_bit = ((ショート) (AccData[0]<<8 |AccData[1])) >> 2;14ビットX軸出力値を計算 Yout_14_bit = ((ショート) (AccData[2]<<8 |AccData[3])) >> 2;14ビットY軸出力値を計算 Zout_14_bit = ((ショート) (AccData[4]<<8 |AccData[5])) >> 2;14ビットZ軸出力値を計算                                      Xout_g = ((float) Xout_14_bit) / SENSITIVITY_2G;X 軸の出力値を g で計算します Yout_g = ((浮動小数点数) Yout_14_bit) / SENSITIVITY_2G;Y 軸の出力値を g で計算します Zout_g = ((float) Zout_14_bit) / SENSITIVITY_2G;Z 軸の出力値を g で計算します } 7. 計算された値は、Debugパースペクティブの右上にある「Variables」ウィンドウまたはFreeMASTERアプリケーションで確認できます。FreeMASTERプロジェクトを開いて実行するには、 FreeMASTER 2.0アプリケーション と FreeMASTER通信ドライバをインストールしてください。 MCUのv10.6のCWで書かれた完全なソースコード(FreeMASTERプロジェクトを含む)が添付されています。 この簡単なアプリケーションについて質問がある場合は、以下からお気軽にお問い合わせください。フィードバックや提案も大歓迎です。 よろしくお願いします。 Tomas 加速度センサ
記事全体を表示
CW10.5でKV10を操作する方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Kinetis KV10用CodeWarrior MCU 10.5   Kinetis K10Fアプリケーション向けのCodeWarrior開発環境をセットアップするには ダウンロードとインストールの手順については、添付のドキュメントをお読みください。 CW MCU v10.5 製品、パッチ、およびサービス パックを、指定された順序でダウンロードしてインストールします。   評価版:CodeWarrior for Microcontrollers 10.5 (Eclipse, Offline) CW MCU v10.5 PEx MQX Lite Update 1.0.1 CW MCU v10.5 Kinetis KV10 75MHzサービス・パック   更新は、次のURLに投稿されました。 http://www.freescale.com/webapp/sps/site/overview.jsp?code=CW_UPDATES_MCU_10_5 全般
記事全体を表示
ファイル システム MCUXpresso IDE からプロジェクトをインポートする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 親愛なるコミュニティの皆様へ このドキュメントの目的は、ファイル システムから MCUXpresso IDE にプロジェクトを統合する方法を示すことです。 実際には、想像しているほど複雑ではありません。 Let's begin... 「ファイルシステムからプロジェクトをインポートする」オプションは、IDE の左下隅にあるクイックスタートパネルに含まれています。 フォルダの場所を入力/貼り付けます(zipまたはunpacked)。次に、[次へ]ボタンをクリックします。 最後に、インポートするすべてのプロジェクトフォルダ/サンプルを選択します。 これで、プロジェクトエクスプローラーからアクセスして利用できるようになります。 ハッピーデベロップメント! よろしくお願いいたします。 Ivan R. Re:ファイルシステムMCUXpresso IDEからプロジェクトをインポートする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Ivan, まず、投稿をありがとう。ライブラリに関する私の問題は、ライブラリファイルをカスタムプロジェクトにリンクできないこと、またnxpボードを使用していないことです。フロントエンドとしてPN512チップを使用し、MCUとしてKL17を使用していますが、パートナーが設計したカスタムボードを使用しています。私は2日間移植に取り組んでおり、コミュニティでPN5180、PN7420への移植に関する多くの投稿を読みましたが、PN512に関連する人は誰もいませんでした。また、すべての例に「ph_Nxp_Built_App.h」と「phApp_Init.h」の2種類のファイルがあることに気付きました。このファイルはデモアプリケーションを初期化すると思いますが、メインファイルのヘッダーファイルにはアプリの機能があるため、「phApp_Init.h」を持つことの用途は何ですか?そして「phApp_Init.c」ファイル。。また、FreeRTOSを使用していないので、この投稿を見つけてNULLOSモードを構成しましたが、これ以外に何か構成する必要がありますか? PN5180 ソフトウェアが PH_OSAL_NULLOS (NfcrdlibEx1_BasicDiscoveryLoop) に設定されたライブラリが機能しない  私の主な目標は、tu をコンパイルして、KL17 と PN512 の basicloop デモ コードを実行することです。 よろしくお願いします。
記事全体を表示
如何在FreeRTOS项目中使用LPTMR KSDK驱动程序 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Kinetis软件开发套件(KSDK)是用于在Kinetis MCU上开发应用的一个软件框架。 框架中的软件组成包括外设驱动程序、中间件和实时操作系统。 KSDK 提供 FreeRTOS 操作系统,选定的驱动程序以附加层的形式提供 FreeRTOS 支持。该解决方案可在基于 RTOS 的应用程序中实现简单的驱动程序集成。 带有FreeRTOS层的驱动程序有: • UART / LPUART / LPSCI • I2C / LPI2C • SPI / LPSPI FreeRTOS操作系统的驱动层建立在KSDK标准外设驱动层之上,用以实现多线程(RTOS)感知。 包装器提供的API可阻塞调用任务,直到I/O操作完成,允许其他任务在后台运行。 该特性的实现需要使用底层驱动程序的异步API以及RTOS任务同步对象。 底层驱动程序需要启用中断以确保正常操作。 此外,还可以使用 KSDK 裸机驱动程序。本文档介绍如何在 FreeRTOS 和 SDK 2.0 项目中使用 LPTMR 驱动程序。本例中使用了 SDK 2.0、FRDMK64F 和 FreeRTOS。 如果您想了解如何使用 FreeRTOS 项目创建新的 SDK 2.0,请查看以下链接: https://community.freescale.com/docs/DOC-330183 GPIO 和 LPTMR 示例: 简介 此示例每 1 秒切换一次蓝色 LED。此示例检查定时器比较标志位,当设置此标志时,蓝色 LED 会改变状态。 编写示例代码 首先需要创建一个带有 FreeRTOS 项目的新 SDK 2.0,请查看以下链接进行操作。      https://community.freescale.com/docs/DOC-330183 2.创建新项目后,打开pin_mux.c文件以启用端口时钟并将必要的引脚配置为 GPIO(对于 FRDM-K64F,RGB LED 通过 GPIO 信号连接:红色到 PTB22,蓝色到 PTB21 以及绿色到 PTE26)。 3.此外,还需要在 pin_mux.c 中启用 lptmr 模块的时钟文件。 4.在 main.c 中文件需要包含 fsl_lptmr.h和fsl_gpio.h。 5.在主函数中,创建一个新任务。此任务将初始化 LPTMR 和 GPIO 驱动程序。对于此示例,新的任务函数被命名为 task_init。 /* 创建 RTOS 任务 */ xTaskCreate( 任务初始化, “任务初始化” , 配置最小堆栈大小, 无效的, 任务优先级,                  NULL); 6.编写task_init函数代码。 a.使用KSDK GPIO驱动程序: 要初始化 GPIO,请在用户文件中定义引脚配置(输入或输出)。然后,调用GPIO_PinInit()函数。 在这种情况下,连接蓝色 LED 的引脚 PTB21 被配置为输出。 gpio_pin_config_t ledB_config = {kGPIO_DigitalOutput, 0,}; GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &ledB_config); 配置GPIO引脚后,可以使用以下GPIO操作: GPIO 输出操作。 GPIO_WritePinOutput  (GPIO_Type *base, uint32_t pin, uint8_t output) GPIO_SetPinsOutput(GPIO_Type *base,uint32_t mask) GPIO_ClearPinsOutput(GPIO_Type *base,uint32_t mask) GPIO_TogglePinsOutput(GPIO_Type *base,uint32_t mask) GPIO 输入操作。 GPIO_ReadPinInput (GPIO_Type *base,uint32_t pin) board.h 文件包含此操作的定义。例如: /*!< 切换目标 LED_BLUE */ #定义LED_BLUE_TOGGLE()\ GPIO_TogglePinsOutput(板_LED_BLUE_GPIO,1U << 板_LED_BLUE_GPIO_PIN) b.使用 KSDK LPTMR 驱动程序: 应在应用程序开始时使用 LPTMR 驱动程序调用 LPTMR_Init ()。此函数初始化 lptmr_config_t 结构,该结构保存 LPTMR 外设的配置设置。要将此结构初始化为合理的默认值,请调用 LPTMR_GetDefaultConfig () 函数并将指针传递给您的配置结构实例。配置结构可以设为 const,以便它驻留在闪存中。 默认值为: 配置->timerMode = kLPTMR_TimerModeTimeCounter; 配置->pinSelect = kLPTMR_PinSelectInput_0; 配置->pinPolarity = kLPTMR_PinPolarityActiveHigh; 配置->启用自由运行 = false; config->bypassPrescaler = true; 配置->预分频器时钟源=kLPTMR_PrescalerClock_1; config->value = kLPTMR_Prescale_Glitch_0; 配置LPTMR后,需要设置定时器周期。LPTMR_SetTimerPeriod(),计时器从0开始计数,直到等于此处设置的计数值。计数值写入CMR寄存器。 最后使用LPTMR_StarTimer()启动计时器。调用此函数后,定时器计数至CMR寄存器的值。每次定时器达到CMR值然后递增时,它都会产生一个触发脉冲并设置超时中断标志。如果启用定时器中断,也会触发中断。 对于此示例,以下几行配置并启动 LPTMR。 /* 配置 LPTMR */ LPTMR_GetDefaultConfig(&lptmrConfig); /*初始化LPTMR*/ LPTMR_Init(LPTMR0, &lptmrConfig); /* 设置定时器周期 */ LPTMR_SetTimerPeriod(LPTMR0,USEC_TO_COUNT(1000000U,LPTMR_SOURCE_CLOCK)); /* 开始计数 */ LPTMR_StartTimer(LPTMR0); c.此示例检查定时器比较标志位,当设置此标志时,蓝色 LED 会改变状态。因此,在无限循环中,LPTMR_GetStatusFlags() 函数检查 状态标志,如果设置了此标志,则切换 LED 并使用 LPTMR_ClearStatusFlags() 函数清除标志。 while (1)    {    if (LPTMR_GetStatusFlags(LPTMR0) )           { LED_BLUE_TOGGLE(); LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag ); } } 7.此时您可以构建并调试示例。 完整代码GPIO和LPTMR示例 #include #包括“board.h” #包括“pin_mux.h” #包括“clock_config.h” #包括“fsl_debug_console.h” #包括“fsl_device_registers.h” #包括“fsl_lptmr.h” #包括“fsl_gpio.h” /* FreeRTOS 内核包括。*/ #包括“FreeRTOS.h” #包括“任务.h” #include "队列.h" #包括“计时器.h” /* 任务优先级。*/ #定义任务优先级(configMAX_PRIORITIES-1) /******************************************************************************* * 定义 ******************************************************************************/ /* 获取 LPTMR 驱动程序的源时钟 */ #定义LPTMR_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_LpoClk) static void task_init(void *pvParameters); /******************************************************************************* * Variables ******************************************************************************/ volatile uint32_t lptmrCounter = 0U; int main ( void ){ /*初始化板硬件。 */ 板初始化引脚(); 主板启动时钟运行();        BOARD_InitDebugConsole(); /* 在这里添加您的代码 */ /* 创建 RTOS 任务 */ xTaskCreate( 任务初始化, “任务初始化” , 配置最小堆栈大小, 无效的, 任务优先级,                      NULL); vTaskStartScheduler(); for (;;) { /* 无限循环以避免离开主函数 */ __asm ( "NOP" ) ; /* 循环时用作断点停止的东西 */        } } static void task_init(void *pvParameters) { 为了(;;) {               lptmr_config_t lptmrConfig; PRINTF( "您正在运行初始化任务。\r\n" ); /*初始化输出 LED GPIO。*/               gpio_pin_config_t ledB_config = {kGPIO_DigitalOutput, 0,};               GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &ledB_config); PRINTF( "LED 蓝色初始化 \r\n" ) ; /* 配置 LPTMR */               /*                * lptmrConfig.timerMode = kLPTMR_TimerModeTimeCounter;                * lptmrConfig.pinSelect = kLPTMR_PinSelectInput_0; *lptmrConfig.pinPolarity = kLPTMR_PinPolarityActiveHigh; * lptmrConfig.enableFreeRunning=假;                * lptmrConfig.bypassPrescaler = true; * lptmrConfig.预分频器时钟源=kLPTMR_预分频器时钟_1;                * lptmrConfig.value = kLPTMR_Prescale_Glitch_0;                */               LPTMR_GetDefaultConfig(&lptmrConfig); /*初始化LPTMR*/               LPTMR_Init(LPTMR0, &lptmrConfig); /* 设置定时器周期 */ LPTMR_SetTimerPeriod(LPTMR0,USEC_TO_COUNT(1000000U,LPTMR_SOURCE_CLOCK)); PRINTF( "低功耗定时器模块已初始化 \r\n" ); /* 开始计数 */               LPTMR_StartTimer(LPTMR0); while (1) {                      if (LPTMR_GetStatusFlags(LPTMR0) ) { lptmr计数器++; LED_蓝色_切换(); LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag ); } }        } }
記事全体を表示
FreeRTOS プロジェクトで LPTMR KSDK ドライバーを使用する方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Kinetisソフトウェア開発キット(KSDK)は、Kinetisマイクロコントローラ上でアプリケーションを開発するためのソフトウェア・フレームワークです。フレームワークのソフトウェアコンポーネントには、ペリフェラルドライバー、ミドルウェア、およびリアルタイムオペレーティングシステムが含まれます。 KSDKはFreeRTOS OSを提供し、選択されたドライバーは追加のレイヤーの形でFreeRTOSサポートを提供します。このソリューションにより、RTOSベースのアプリケーションへのドライバ統合が容易になります。 FreeRTOS レイヤーを持つドライバーは次のとおりです。 • UART / LPUART / LPSCI • I2C / LPI2C • SPI / LPSPI FreeRTOS OS のドライバーは、標準の KSDK 周辺機器ドライバーの上に構築されたレイヤーで、マルチスレッド (RTOS) 認識を実現します。ラッパーは、I/O 操作が完了するまで呼び出し元のタスクをブロックし、他のタスクをバックグラウンドで実行できるようにする API を提供します。これは、基になるドライバーの非同期 API と RTOS タスク同期オブジェクトを使用して実現されます。基盤となるドライバーは、適切に動作するために有効な割り込みを必要とします。 さらに、KSDKベアメタルドライバーを使用することも可能です。このドキュメントでは、FreeRTOS および SDK 2.0 プロジェクトで LPTMR ドライバーを使用する方法について説明します。この例では、SDK 2.0、FRDMK64F、および FreeRTOS を使用しています。 FreeRTOSプロジェクトを使用して新しいSDK 2.0を作成する方法を知りたい場合は、以下のリンクを確認してください https://community.freescale.com/docs/DOC-330183 GPIOとLPTMRの例: はじめに この例では、青色の LED を 1 秒ごとに切り替えます。この例では、Timer Compare Flagビットをチェックし、このフラグが設定されると青色LEDのステータスが変わります。 サンプルコードの記述 まず、FreeRTOSプロジェクトを使用して新しいSDK 2.0を作成する必要がありますので、以下のリンクを確認してください。      https://community.freescale.com/docs/DOC-330183 2.新しいプロジェクトを作成したら、pin_mux.c を開きますポートクロックを有効にし、必要なピンをGPIOとして構成するためのファイル(FRDM-K64Fの場合、RGB LEDはGPIO信号を介して接続されます:赤からPTB22、青からPTB21、緑からPTE26)。 3.さらに、pin_mux.c で lptmr モジュールのクロックを有効にする必要がありますファイル。 4.main.c でファイルには fsl_lptmr.h を含める必要がありますとfsl_gpio.h. 5.main 関数で、新しいタスクを作成します。このタスクは、LPTMR ドライバーと GPIO ドライバーを初期化します。この例では、新しいタスク関数の名前は task_init です。 /* RTOSタスクを作成 */ xTaskCreate( task_init、                  "Task_Init"、 configMINIMAL_STACK_SIZE、 ヌル task_PRIORITY、                  NULL); 6.task_init関数コードを記述します。 ある。KSDK GPIO ドライバーの使用: GPIO を初期化するには、ユーザー ファイルでピン構成 (入力または出力) を定義します。次に、 GPIO_PinInit() 関数を呼び出します。 今回は青色LEDが接続されているピンPTB21を出力として設定しました。 gpio_pin_config_t ledB_config = {kGPIO_DigitalOutput, 0,}; GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &ledB_config); GPIO ピンをコンフィギュレーションすると、次の GPIO 操作を使用できます。 GPIO出力操作。 GPIO_WritePinOutput  (GPIO_Type *base, uint32_t pin, uint8_t output) GPIO_SetPinsOutput(GPIO_Type ※ベース、uint32_tマスク) GPIO_ClearPinsOutput(GPIO_Type ※ベース、uint32_tマスク) GPIO_TogglePinsOutput(GPIO_Type ※ベース、uint32_tマスク) GPIO 入力操作。 GPIO_ReadPinInput (GPIO_Type ※ベース、uint32_tピン) board.h ファイルには、この操作の定義が含まれています。例えば: /*!< ターゲットLED_BLUEの切り替え */ #define LED_BLUE_TOGGLE() \ GPIO_TogglePinsOutput(BOARD_LED_BLUE_GPIO、1U<< BOARD_LED_BLUE_GPIO_PIN) b.KSDK LPTMR ドライバーを使用する場合: LPTMR_Init () は、アプリケーションの先頭で LPTMR ドライバーを使用して呼び出す必要があります。この関数は lptmr_config_t 構造体を初期化し、この構造体は LPTMR 周辺機器の構成設定を保持します。この構造体を適切な既定値に初期化するには、LPTMR_GetDefaultConfig() 関数を呼び出し、構成構造体インスタンスへのポインターを渡します。config構造体は、フラッシュに存在するようにconstにすることができます。 デフォルト値は次のとおりです。 config->timerMode = kLPTMR_TimerModeTimeCounter; config->pinSelect = kLPTMR_PinSelectInput_0; config->pinPolarity = kLPTMR_PinPolarityActiveHigh; config->enableFreeRunning = false; config->bypassPrescaler = true; config->prescalerClockSource = kLPTMR_PrescalerClock_1; config->value = kLPTMR_Prescale_Glitch_0; LPTMRを設定した後、タイマー期間を設定する必要があります。LPTMR_SetTimerPeriod() は、タイマーが 0 からここで設定されたカウント値と等しくなるまでカウントします。カウント値はCMRレジスタに書き込まれます。 最後に、LPTMR_StarTimer () を使用してタイマーを開始します。この関数を呼び出した後、タイマーはCMRレジスタ値までカウントアップします。タイマがCMR値に達してからインクリメントするたびに、トリガパルスが生成され、タイムアウト割込みフラグが設定されます。タイマー割り込みが有効になっている場合も、割り込みがトリガーされます。 この例では、次の行で LPTMR を構成して開始します。 /* LPTMR の設定 */ LPTMR_GetDefaultConfig(&lptmrConfig); /* LPTMR を初期化します */ LPTMR_Init(LPTMR0, &lptmrConfig); /* タイマー周期を設定 */ LPTMR_SetTimerPeriod(LPTMR0, USEC_TO_COUNT(1000000U, LPTMR_SOURCE_CLOCK)); /* カウント開始 */ LPTMR_StartTimer(LPTMR0);                   c.この例では、Timer Compare Flagビットをチェックし、このフラグが設定されると青色LEDのステータスが変わります。したがって、無限ループでは、LPTMR_GetStatusFlags()関数がチェックします ステータスフラグ (このフラグが設定されている場合は、LED を切り替えて、LPTMR_ClearStatusFlags() 関数を使用してフラグをクリアします。 (1) ながら    {    if (LPTMR_GetStatusFlags(LPTMR0) )           { LED_BLUE_TOGGLE();                      LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag);               } } 7.この時点で、サンプルをビルドしてデバッグできます。 完全なコード GPIO と LPTMR の例 #include #include「ボード.h」 #include「pin_mux.h」 #include 「clock_config.h」 #include「fsl_debug_console.h」 #include 「fsl_device_registers.h」 #include 「fsl_lptmr.h」 #include 「fsl_gpio.h」 /* FreeRTOS カーネルには以下が含まれます。*/ #include「FreeRTOS.h」 #include「task.h」 #include「queue.h」 #include「timers.h」 /* タスクの優先順位。*/ #define task_PRIORITY (configMAX_PRIORITIES-1) /******************************************************************************* *定義 ******************************************************************************/ /* LPTMR ドライバーのソースクロックを取得 */ #define LPTMR_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_LpoClk) static void task_init(void *pvParameters); /******************************************************************************* * Variables ******************************************************************************/ volatile uint32_t lptmrCounter = 0U; int main(void) {        /* ボード ハードウェアを初期化 します。*/ BOARD_InitPins(); BOARD_BootClockRUN();        BOARD_InitDebugConsole();        /* ここにコードを追加 */        /* RTOSタスクを作成 */ xTaskCreate( task_init、                      "Task_Init"、 configMINIMAL_STACK_SIZE、 ヌル task_PRIORITY、                      NULL); vTaskStartScheduler();        for(;;){ /* メイン関数から離れないようにするための無限ループ */               __asm(「NOP」); /* ループ中のブレークポイント停止として使用するもの */        } } static void task_init(void *pvParameters) {        for (;;){               lptmr_config_t lptmrConfig; PRINTF("初期化タスクを実行しています。\r\n");               /* イニット 出力LEDGPIO。*/               gpio_pin_config_t ledB_config = {kGPIO_DigitalOutput, 0,};               GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &ledB_config); PRINTF("LED BLUE 初期化済み \r\n");               /* LPTMR の設定 */               /*                * lptmrConfig.timerMode = kLPTMR_TimerModeTimeCounter;                * lptmrConfig.pinSelect = kLPTMR_PinSelectInput_0; * lptmrConfig.pinPolarity = kLPTMR_PinPolarityActiveHigh; * lptmrConfig.enableFreeRunning= false;                * lptmrConfig.bypassPrescaler = true; * lptmrConfig.prescalerClockSource= kLPTMR_PrescalerClock_1;                * lptmrConfig.value = kLPTMR_Prescale_Glitch_0;                */               LPTMR_GetDefaultConfig(&lptmrConfig);               /* LPTMR を初期化します */               LPTMR_Init(LPTMR0, &lptmrConfig);               /* タイマー周期を設定 */ LPTMR_SetTimerPeriod(LPTMR0, USEC_TO_COUNT(1000000U, LPTMR_SOURCE_CLOCK)); PRINTF("低電力タイマー モジュールが初期化されました \r\n");               /* カウント開始 */               LPTMR_StartTimer(LPTMR0); (1) ながら {                      if (LPTMR_GetStatusFlags(LPTMR0) ) { lptmrCounter ++; LED_BLUE_TOGGLE(); LPTMR_ClearStatusFlags(LPTMR0, kLPTMR_TimerCompareFlag); } }        } }
記事全体を表示
KW36 - 32kHz RTC外部発振器のトリミング調整 はじめに FRDM-KW36には、32kHzの水晶発振器を備えたRTCモジュールが含まれています。このモジュールは、超低消費電力モードで動作しながら、MCU用の32kHzクロックソースを生成します。この発振器には、C LOAD として使用されるプログラム可能なコンデンサのセットが含まれています。これらのコンデンサの値を変更すると、発振器が提供する周波数を変更できます。 この構成可能な容量は、0pF(コンデンサ・バンク・ディセーブル)から30pFまで、2pF刻みで範囲が広い範囲です。これらの値は、イネーブルされたコンデンサを組み合わせて取得します。使用可能な値は、2 pF、4 pF、8 pF、および 16 pF です これら4つの任意の組み合わせが可能です。外部コンデンサが使用可能な場合は、これらの内部コンデンサをディスエーブルすることをお勧めします (RTC 制御レジスタ SFR の SC2P、SC4P、SCS8、および SC16 ビットをクリアします)。 オシレーターによって提供される周波数を調整するには、最初に周波数を測定できる必要があります。周波数カウンタを使用すると、オシロスコープよりも正確な測定が可能になるため、理想的です。また、オシレーター周波数を出力する必要もあります。発振器の周波数を出力するには、例としてBluetoothデモアプリケーションのいずれかを歌うample、次の手順を実行する必要があります。 周波数の調整例 この例では、Connectivity Software Stack の Heart Rate Sensor デモ (freertos バージョン) を利用し、開発者が SDK から IDE へのプロジェクトのインポートまたはオープンに関する知識を持っていることを前提としています。 SDK から Heart Rate Sensor プロジェクトを開くか、クローンします。 ワークスペースの board フォルダーで board.c ファイルと board.h ファイルを見つけます。                                                                                ボード上でvoid関数を宣言します。ファイルを作成します。この機能は、RTC クロックを PTB3 にマルチプレクサし、周波数を測定できるようにするためのものです。 /* Function to mux PTB3 to RTC_CLKOUT */ void BOARD_EnableRtcClkOut (void);‍‍ ボード内部でBOARD_EnableRtcClkOut機能を開発します。ファイルを以下のように用意しています。 void BOARD_EnableRtcClkOut(void) { /* Enable PORTB clock gating */ CLOCK_EnableClock(kCLOCK_PortB); /* Mux the RTC_CLKOUT to PTB3 */ PORT_SetPinMux(PORTB, 3u, kPORT_MuxAlt7); /* Select the 32kHz reference for RTC_CLKOUT signal */ SIM->SOPT1 |= SIM_SOPT1_OSC32KOUT(1); } BOARD_BootClockRUN直後hardware_init関数のBOARD_EnableRtcClkOut関数を呼び出します(board.cファイル)。 clock_config.cを探すワークスペースのボードフォルダー内のファイル。 ファイルの先頭に次の定義を追加します。 #define RTC_OSC_CAP_LOAD_0 0x0U /*!< RTC oscillator, capacitance 0pF */ #define RTC_OSC_CAP_LOAD_2 0x2000U /*!< RTC oscillator, capacitance 2pF */ #define RTC_OSC_CAP_LOAD_4 0x1000U /*!< RTC oscillator, capacitance 4pF */ #define RTC_OSC_CAP_LOAD_6 0x3000U /*!< RTC oscillator, capacitance 6pF */ #define RTC_OSC_CAP_LOAD_8 0x800U /*!< RTC oscillator, capacitance 8pF */ #define RTC_OSC_CAP_LOAD_10 0x2800U /*!< RTC oscillator, capacitance 10pF */ #define RTC_OSC_CAP_LOAD_12 0x1800U /*!< RTC oscillator, capacitance 12pF */ #define RTC_OSC_CAP_LOAD_14 0x3800U /*!< RTC oscillator, capacitance 14pF */ #define RTC_OSC_CAP_LOAD_16 0x400U /*!< RTC oscillator, capacitance 16pF */ #define RTC_OSC_CAP_LOAD_18 0x2400U /*!< RTC oscillator, capacitance 18pF */ #define RTC_OSC_CAP_LOAD_20 0x1400U /*!< RTC oscillator, capacitance 20pF */ #define RTC_OSC_CAP_LOAD_22 0x3400U /*!< RTC oscillator, capacitance 22pF */ #define RTC_OSC_CAP_LOAD_24 0xC00U /*!< RTC oscillator, capacitance 24pF */ #define RTC_OSC_CAP_LOAD_26 0x2C00U /*!< RTC oscillator, capacitance 26pF */ #define RTC_OSC_CAP_LOAD_28 0x1C00U /*!< RTC oscillator, capacitance 28pF */ #define RTC_OSC_CAP_LOAD_30 0x3C00U /*!< RTC oscillator, capacitance 30pF */ BOARD_BootClockRUN 関数内の関数へのCLOCK_CONFIG_EnableRtcOsc呼び出しを検索します (clock_config.cファイル)、上記の定義のいずれかで引数を編集します。 最後に、「preinclude.h」で低電力オプションとLEDサポートを無効にしますプロジェクトのソースフォルダにあるファイル: #define cPWR_UsePowerDownMode 0 #define gLEDSupported_d 0 この時点で、PTB3で測定し、周波数カウンターを使用して周波数調整で遊ぶことができます。ボードがプログラムされるたびに、正しい測定値を得るためにPORを実行する必要があります。次の表は、FRDM-KW36ボードrev Bから取得したもので、周波数を調整するための基準として使用できます。容量は、イネーブルされた内部容量だけでなく、パッケージ、ボンディングワイヤ、ボンディングパッド、およびPCBトレースに見られる寄生容量で構成されることに注意してください。したがって、以下に示す基準測定値は実際の値に近い必要がありますが、周波数がボードとレイアウトに合わせてトリミングされていることを確認するために、ボードを使用して測定も行う必要があります。 イネーブルコンデンサ Cロード キャパシタンスの定義 周波数 - 0pF RTC_OSC_CAP_LOAD_0 (銀行が無効) 32772.980Hz SC2P 2ページF RTC_OSC_CAP_LOAD_2 32771.330Hz SC4P 4ページF RTC_OSC_CAP_LOAD_4 32770.050Hz SC2P, SC4P 6pF RTC_OSC_CAP_LOAD_6 32769.122Hz SC8P 8ページF RTC_OSC_CAP_LOAD_8 32768.289Hz SC2P, SC8P 10pF RTC_OSC_CAP_LOAD_10 32767.701Hz SC4P, SC8P 12pF RTC_OSC_CAP_LOAD_12 32767.182Hz SC2P, SC4P, SC8P 14pFの RTC_OSC_CAP_LOAD_14 32766.766Hz SC16P 16pF RTC_OSC_CAP_LOAD_16 32766.338Hz SC2P, SC16P 18pFの RTC_OSC_CAP_LOAD_18 32766.038Hz SC4P, SC16P 20pFの RTC_OSC_CAP_LOAD_20 32765.762Hz SC2P, SC4P, SC16P 22pFの RTC_OSC_CAP_LOAD_22 32765.532Hz SC8P, SC16P 24pFの RTC_OSC_CAP_LOAD_24 32765.297Hz SC2P, SC8P, SC16P 26pF RTC_OSC_CAP_LOAD_26 32765.117Hz SC4P, SC8P, SC16P 28pFの RTC_OSC_CAP_LOAD_28 32764.940Hz SC2P, SC4P, SC8P, SC16P 30pF RTC_OSC_CAP_LOAD_30 32764.764Hz BLEソフトウェア kW KW35 |36
記事全体を表示
从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> LS1021xA系列产品开始支持QSPI闪存启动。 但是从 QSPI 闪存启动与从 SPI 闪存启动不同。 QSPI 启动使用 XIP(就地执行)方法,就像 NOR Flash 启动一样。 分配给 QSPI 闪存的内存映射起始地址为 0x4000000。 您需要将代码放在正确的位置。 您应该注意的另一个关键点是 QSPI 控制器和 ARM AMBA AXI 总线之间的数据字节序格式。 任何刻录到 QSPI Flash 的二进制文件都应首先完成字节交换过程。 我们的 Ls1021xA Bsp 在名为“byte_swap.tcl”的 Tcl 脚本文件中提供了此功能。 按照以下命令完成此过程。 tclsh ./byte_swap.tcl ./ .bin ./ .bin 8 然后从 SD/MMC 媒体启动系统。 按照以下命令将映像文件刻录到 QSPI Flash 中。 => tftp 0x81000000 rcw_qspiboot_swap.bin (测量此二进制文件包含PBI命令:0xee0200、0x40010000 这是 u-boot 地址的解决方法) => SF探测器 => sf擦除 0 0x10000 => sf写入 0x81000000 0 0x100 => tftp 0x82000000 u-boot-qspiboot_swap.bin => sf擦除 0x10000 0x90000 => sf写入 0x82000000 0x10000 0x80000 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 是的,T系列、LS系列和部分P系列QorIQ产品需要RCW二进制文件。 我们的 SDK 将帮助您在代码构建过程之后自动将 RCW 数据插入 U-boot 二进制文件中。 但LS SDK尚未完成所有功能。 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 谢谢明哲, 无论我如何启动 LS1021A 板,是否总是需要 RCW 二进制文件? 这些配置是否已经像 imx6 一样包含在 u-boot 中? 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> rcw_qspiboot_swap.bin 文件是什么? 您可以使用脚本“ byte_swap.tcl”将 rcw.bin 交换为rcw_qspiboot_swap.bin。 tclsh ./byte_swap.tcl ./ .bin ./ .bin 8 当我编译 u-boot 时,我只能得到 u-boot.bin。 您可以使用 QorIQ 配置套件“预引导加载程序工具”为您的定制板生成特定的 RCW 二进制文件。 该文件对于启动主板是否必要? 是的,这是一个预引导加载程序代码,您需要小心修改它。 回复:从 LS102xA 上的 QSPI 启动 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, 我正在从 QSPI 闪存启动定制的 LS1021A 板,我有一个问题: rcw_qspiboot_swap.bin 文件是什么? 当我编译 u-boot 时,我只能得到 u-boot.bin。 该文件对于启动主板是否必要? 谢谢!
記事全体を表示
读取s32k116 EVB板的LIN信号时出现问题 我有一个主节点,可以发送两个帧 ID 为 0x30 的信号。在我的例子中,当我发送帧 ID 为 0x30 的信号(帧 ID 为 0x01 0xff 0xff 0xff)时,任何一个 GPIO 引脚都应该为高电平(LED 灯亮);或者,当发送帧 ID 为 0x30 的信号(帧 ID 为 0x00 0xff 0xff 0xff)时,另一个配置了 LED 的 GPIO 引脚应该为高电平。我已经配置了所有 LIN 协议栈,并希望读取主节点发送的 LIN 信号消息。主节点将发送默认信号 0xFF 0xFF 0xFF 0XFF。当我尝试使用以下命令读取第一个字节信号时 数据1 = l_u8_rd_LI0_EVK_CTRL_Byte_1(); 我可以看到信号值为 0XFF,但即使我从主节点更改,它在从属节点中也不会改变。我已附加 lin ldf 和 main.c下面的文件供您参考。 我参考了示例 lin_slave_s32k116,如下所示: santhosh23_0-1721226664724.png 为了读取改变的信号我是否遗漏了什么?或者我需要做出一些改变吗? 非常感谢与此相关的任何建议或简单示例。 提前致谢! 谢谢与问候, 桑托什 #林 #s32k 回复:读取s32k116 EVB板的LIN信号时出现问题 大家好, 我找到了 LIN 协议问题的解决方案,我希望这对第一次使用该协议的任何人有所帮助。问题出在我的主板上的 UART 配置上。最初它被设置为 UART 引脚 PTC 6 和 7,但它们应该设置为 PTC 8 和 9。一旦我纠正了引脚配置,一切都开始按预期工作。 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 感谢@PetrS的快速回复! 请尽快发送。我期待您的回复。 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 最好检查收发器上的 SLP,所以是 TP521。 TXD 是 MCU 的输出,所以只有当从机(MCU)发送响应时才会有信号。 RXD 是 MCU 的输入,如果收发器处于活动状态,它将遵循 LIN 总线信号。因此,如果收发器正在工作,您必须在 RXD 上看到与 LIN 上相同的信号。 我可以进行新的捕获,但没有板,所以最早也要下周才能进行。 BR, Petr 回复:读取s32k116 EVB板的LIN信号时出现问题 你好@PetrS , 我检查了PTA7 引脚,它在分析仪上显示高电平(5V)。但我不明白为什么收发器的 PTC6 RXD 或 PTC7 TXD 引脚上没有信号。 如果可能的话,您能否分享您的 EVB 工作或响应 lin 信号的视频片段? 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 检查电路板原理图。您可以测量测试点 TP521。 在 revB 板上,/SLP 被拉高并且没有连接到 MCU,无需做任何事情 PetrS_0-1722341386072.png 在 revA 板上没有上拉,而是连接到 PTA7,然后 PTA7 应该保持高位 PetrS_1-1722341444419.png BR, Petr 回复:读取s32k116 EVB板的LIN信号时出现问题 你好@PetrS ! 您说得对,我用分析仪没看到任何来自TDX和RXD线路的信号。这意味着收发器没有激活。您能解释一下如何检查SLP引脚,以便将其拉到PCB上吗? 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 是的,看起来正确。 我建议使用示波器/分析仪检查 TDX、RXD 线路,以确保 LIN 信号通过收发器。确保收发器处于活动状态,检查 /SLP 引脚,例如在 revA 板上,这没有在 PCB 上拉起。 BR, Petr 回复:读取s32k116 EVB板的LIN信号时出现问题 感谢@PetrS的回复! 如果这对您来说没问题,那么我可能遗漏了硬件配置部分的一些内容。 我做了以下硬件配置: * 连接 12 V 外部电源并将跳线 J107 更改为 1-2(默认)。 *移除跳线 J108,因为它不处于主模式。 *连接 NXP EVB 的 lin 通信外设的 lin 总线、Gnd 和 12 V,如下图所示。 santhosh23_0-1722335901041.png 如果我遗漏了其他内容,请告诉我。 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 我尝试了这个项目,它似乎运行正常,我使用 PLIN View 并在那里加载 ldf 来作为 BABY_LIN 主机工作。 从机(EVB 板)响应主机 Status_EVK_Board_LIN 帧并根据 Control_EVK_Board_LIN 帧中接收到的数据控制 EVB LED,请参阅所附视频。 BR, Petr 回复:读取s32k116 EVB板的LIN信号时出现问题 你好@PetrS , 感谢您的回复! 按照你的建议,我尝试在S32K116板上使用S32 DS 3.4版的SDK RTM 4.0.3从属演示,但它没有按预期工作。我还用逻辑分析仪监测了UART外设引脚(如PTC 6和7)的信号,但没有看到任何信号。请找到此消息附带的所有必要的项目文件,如果我遗漏了什么,请告诉我。 提前致谢! 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 项目正在使用一些旧的 SDK 版本,我没有安装,因此很难修改/构建代码。 从 main.c 文件来看,您似乎缺少 PORT_IRQHandler 和 AutoBaudCapture 调用部分。尝试添加在演示项目中使用的内容。 我测试了 SDK RTM 4.0.3S32K116 板上的从机演示,运行正常。 BR, Petr 回复:读取s32k116 EVB板的LIN信号时出现问题 另外,来自主节点的其他信号如下所示。 对于 0x01: santhosh23_0-1721742989318.png 对于 0x00: santhosh23_1-1721743016558.png 回复:读取s32k116 EVB板的LIN信号时出现问题 你好@PetrS , 我尝试过这种方法,也进行了必要的硬件配置,但从 s32k116 EVB 看不到信号变化。这里,一旦执行擦除标志线,数据1将变为0x00,然后默认再次返回0xFF。我还检查了我的主节点,它正在按预期发送信号,如下所示。 santhosh23_0-1721742303195.png 我已附上包含所有必要文件(如 main.c 和 ldf 文件)的文档,供您参考。如果我遗漏了某些内容,请告诉我,以便正确读取数据。 我期待您的回复。 感谢并敬意, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 如果您需要使用 LIN 堆栈,那么您需要参考 SDK 或 RTD 演示示例。SDK 或 RTD 也提供 LIN 驱动程序演示。它可以正常工作。电路板必须由 12V 供电,并且主板必须放置 MASTER 跳线。您应该能够测量 LIN 线路和 TXD、RXD 引脚上的 LIN 帧。 如果你想要一些从属裸机代码,下面的代码可能也会有用 https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K116-LPUART-LIN-Slave-TXRX-ISR-S32DS-ARM-2-2/ta-p/1128538 BR, Petr  回复:读取s32k116 EVB板的LIN信号时出现问题 感谢@PetrS的回复! 我尝试了下面的两个例子。 1. 林大师 2. 林奴隶 santhosh23_0-1721392444542.png 我无法发送任何信号,也无法接收任何信号。在尝试这些示例之前,是否需要对硬件进行任何设置或配置,例如正确设置跳线或其他设置? 如果是,请告诉我详细步骤。另外,请提供一个简单的示例,其中 s32k EVB 可以读取从主节点发送的 lin 信号。 我期待您的回复。 谢谢与问候, 桑托什 回复:读取s32k116 EVB板的LIN信号时出现问题 Hi, 如果您收到 ID 为 0x30 的帧,那么根据您的 ldf,我认为您应该检查/清除 NXP_EVK_Byte_1 标志。 /* 检查信号是否更新 */ 如果(l_flg_tst_LI0_NXP_EVK_Byte_1_flag()) { /* 清除此标志... */ l_flg_clr_LI0_NXP_EVK_Byte_1_标志(); /* 存储选择数据 */ 数据1 = l_u8_rd_LI0_NXP_EVK_Byte_1(); ..... 另外,您似乎正在使用一些较旧的 SDK 版本,建议使用最新版本。 BR, Petr
記事全体を表示
NXP_C45_TJA11XX 驱动程序软重置问题 大家好, 我们正在开发一款带有 TI TDA4 SoC 和 TJA1120 PHY 的定制主板。在我们的 Linux 版本中包含 nxp_c45_tja11xx 驱动程序后,我们在 nxp_c45_soft_reset 函数内部的启动过程中遇到了错误。如果我们对 phy_read_mmd_poll_timeout 宏调用进行更改,使得其最后一个参数(sleep_before_read)为 true 而不是默认的 false,则此问题就会消失。我们还尝试在 phy_read_mmd_poll_timeout 之前使用较短的睡眠时间(1000 微秒),这也有效。 似乎在 MDIO 写入和读取之间没有任何休眠的情况下,软件在重置时尝试读取 PHY 寄存器并失败。但奇怪的是,至今无人注意到这一点。这可能是由我们的主板引起的,还是驱动程序中的一个错误? 笔记: 我们正在使用 TJA1120A Phy 的修订版 1。 顺祝商祺! Dusan   回复:NXP_C45_TJA11XX 驱动程序软重置问题 补丁已发送: https://lkml.org/lkml/2025/1/16/837 回复:NXP_C45_TJA11XX 驱动程序软重置问题 Hello @rm_ , 那太好了。请这么做。 顺祝商祺! 帕维尔 回复:NXP_C45_TJA11XX 驱动程序软重置问题 你好@PavelL , 我正在和杜桑合作做这件事。我们应该创建一个修复补丁并将其发送给驱动程序维护人员吗? 此致, 米洛斯 回复:NXP_C45_TJA11XX 驱动程序软重置问题 你好@DusanStanisic99 , 这可能是驱动程序中的一个小错误。在我看来,你的观察似乎是正确的。 请参阅 TJA1120 的应用说明 AN13663 第 30 页 - 其中描述了启动时间。 PavelL_0-1736952413530.png 顺祝商祺! 帕维尔
記事全体を表示
驱动强度启用 DSE 与 MCX A 中的 DSE1 Hello, 我对 MCX A micros 中的驱动强度配置有一些疑问: JosG_0-1729155120604.png PCRn寄存器中的DSE和DSE1有什么区别?DSE1在I/O引脚图结构图中集成在什么位置?我无法清楚地理解其中的区别…… JosG_1-1729155120630.png 谢谢! MCXA 回复:在 MCX A 中启用 DSE 与 DSE1 的驱动强度对比 我很高兴能帮助你。如有新问题,欢迎创建新主题。 回复:在 MCX A 中启用 DSE 与 DSE1 的驱动强度对比 谢谢 Celeste! 回复:在 MCX A 中启用 DSE 与 DSE1 的驱动强度对比 Hello @JosG , 感谢您联系 NXP 技术支持。 有关 DSE 的更多信息,您可以在数据表中找到。其中提到“所有类型 IO 的 Pin Control 寄存器中都支持 PE、PS、SRE、ODE 和 DSE。5VTol和 HD 焊盘支持引脚的 Pin Control 寄存器中的两个 DSE 位。 ”在PCRn寄存器中,DSE和DSE1是这两个位的名称。并非所有 PCRn 寄存器都有两个 DSE 位;有些只有一个。详细信息可以在参考手册中找到。基于此,I/O引脚图结构就很容易理解了。其上标示的DSE包括DSE和DSE1。 您还可以在数据表中找到一些有用的信息。比如第23页提到的,如下图所示: Celeste_Liu_0-1729233125335.png 关于PCRn[DSE]的详细介绍,可以参考下图。 Celeste_Liu_1-1729233170952.png 希望以上信息对您有用。 顺祝商祺! Celeste
記事全体を表示
S32G处理器板的丝印 Hello, 我可以找到平台板的SILKSCREEN文件,即30081_D_Silk_Top_Bottom.pdf。 您能帮助生成 EVB 和 EVB3 处理器板的 SILKSCREEN 文件吗? 谢谢! 回复:S32G处理器板的丝印 会做。 谢谢! 回复:S32G处理器板的丝印 Hi, 有关 EVB 和 EVB3 的所有可用信息均在相应的 NXP 产品页面下提供: EVB -> S32G2 车辆网络评估板 | NXP 半导体 EVB3 -> S32G 车辆网络处理评估板 3 | 恩智浦半导体 如果您所寻找的信息在上述页面中不可用,那么该信息根本就不可用。我们深感抱歉。 我们建议您联系当地的 NXP FAE/DFAE/代表,他们应该能够进一步协助您进行此查询,并了解是否还有其他可用信息(除了产品页面下显示的内容之外)。 请告知我们。
記事全体を表示