主题:SysConfig 中讨论的其他器件
工具/软件:
您好 TI、
我们需要在 Main2_1内核中配置具有 CS0的 MCU_SPI0、您能否提供任何如何配置的示例代码? 我们正在使用 RTOS SDK 10.1并进行检查、但无法找到 MCU_SPI0、我看到 MCSPI3已配置。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
您好 TI、
我们需要在 Main2_1内核中配置具有 CS0的 MCU_SPI0、您能否提供任何如何配置的示例代码? 我们正在使用 RTOS SDK 10.1并进行检查、但无法找到 MCU_SPI0、我看到 MCSPI3已配置。
您好:
关闭此主题。
此致
Tarun Mukesh
尊敬的 Tarun:
下面的函数主要是空的吗?请告诉我们如何配置来自 Main2_1内核的该电源和 clksrc、我附加了来自 Main2_1内核的完整 SPI 模块代码、您能否验证一次?
Void Spi App_Power AndClkSrc (void)
{
/* MCU 模块(如果包含)将替换此操作*/
返回;
}
此致、
Satya。
您好:
在 SBL 中、我们将为 SPI 模块上电并提供调用。 请问您使用的引导流程是什么?
[报价 userid="635888" url="~/support/processors-group/processors/f/processors-forum/1516134/dra829v-ep2000-main2_1-how-to-use-mcu_spi0-in-main2_1-core/5831205 #5831205"]Void Spi App_Power AndClkSrc (void)
{
/* MCU 模块(如果包含)将替换此操作*/
返回;
}
[/报价]如果 SPI 已上电、则无需使用此 API。 否则,我们在 MCAL 中有 MCU 模块,您需要在 AUTOSAR OS 中将 SPI 和 MCU 模块集成在一起。
此致
Tarun Mukesh
你好、Tarun、
我认为我们不是通过 uboot 进行控制、但如果我使用以下逻辑读取 power 和 clk 状态变为1、
uint32 moduleId、clkId、uint64 clkRate)是 Std_Return App_Implementation 的类型 MCU_CB_Uint32
{
uint32_t Val = E_NOT_OK;
sint32 status = 0;
Uint32 moduleState = 0U;
Uint32 resetState = 0U;
Uint32 contextLossState = 0U;
UINT32 clockStatus = 0U;
IF (STATUS =0)
{
/*获取模块状态。 如果已打开、则无需更改状态*/
状态= Sciclient_pmGetModuleState (moduleId、&moduleState、&resetState、
contextLossState (&contextLossState)、
SCICLIENT_SERVICE_WAIT_FOREVER);
debug_log ("Sciclient_pmGetModuleState %X "、moduleState);
IF (STATUS == E_OK)
{
/*检查是否启用时钟*/
状态= Sciclient_pmModuleGetClkStatus (moduleId、
clkId、
clockStatus、(&C)
SCICLIENT_SERVICE_WAIT_FOREVER);
debug_log ("Sciclient_pmModuleGetClkStatus %X "、clockStatus);
}
}
返回(RetVal);
}
输入
moduleid: TISCI_MCU_MCSPI0
clkid: TISI_DEV_MCU_MCSPI0_CLKSPIREF_CLK
ModuleState、 clockStatus 的值为1表示时钟正常?
此致、
Satya。
您可以 App_Implementation 在示例中查看完整的 MCU_CB_API 使用情况
td_ReturnType Mcu_CB_App_Implementation(uint32 moduleId, uint32 clkId, uint64 clkRate) { uint32 retVal = E_NOT_OK; sint32 status = E_NOT_OK; uint32 moduleState = 0U; uint32 resetState = 0U; uint32 contextLossState = 0U; uint32 i = 0U; uint64 respClkRate = 0; uint32 numParents = 0U; uint32 moduleClockParentChanged = 0U; uint32 clockStatus = 0U; uint32 origParent = 0U; uint32 foundParent = 0U; uint64 freqHz = 0U; status = Sciclient_init(NULL); if (status == 0) { /* Get the module state. No need to change the state if already ON */ status = Sciclient_pmGetModuleState(moduleId, &moduleState, &resetState, &contextLossState, SCICLIENT_SERVICE_WAIT_FOREVER); if(moduleState == TISCI_MSG_VALUE_DEVICE_HW_STATE_OFF) { status = Sciclient_pmSetModuleState(moduleId, TISCI_MSG_VALUE_DEVICE_SW_STATE_ON, (TISCI_MSG_FLAG_AOP | TISCI_MSG_FLAG_DEVICE_RESET_ISO), SCICLIENT_SERVICE_WAIT_FOREVER); if (status == 0) { status = Sciclient_pmSetModuleRst(moduleId, 0x0U, SCICLIENT_SERVICE_WAIT_FOREVER); } else { AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, " Module state is not set for module id = %d !!!\n", moduleId); } } if (status == E_OK) { /* Check if the clock is enabled or not */ status = Sciclient_pmModuleGetClkStatus(moduleId, clkId, &clockStatus, SCICLIENT_SERVICE_WAIT_FOREVER); } if (status == E_OK) { /* Get the number of parents for the clock */ status = Sciclient_pmGetModuleClkNumParent(moduleId, clkId, &numParents, SCICLIENT_SERVICE_WAIT_FOREVER); if ((status == LLD_PASS) && (numParents > 1U)) { status = Sciclient_pmGetModuleClkParent(moduleId, clkId, &origParent, SCICLIENT_SERVICE_WAIT_FOREVER); } } if (status == LLD_PASS) { /* Disabling the clock */ status = Sciclient_pmModuleClkRequest( moduleId, clkId, TISCI_MSG_VALUE_CLOCK_SW_STATE_UNREQ, 0U, SCICLIENT_SERVICE_WAIT_FOREVER); } if (status == E_OK) { AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, " Module clock request successful !!!\n"); } else { retVal = E_NOT_OK; } if (status == LLD_PASS) { foundParent = 0U; /* Try to loop and change parents of the clock */ for(i=0U;i<numParents;i++) { if (numParents > 1U) { /* Setting the new parent */ status = Sciclient_pmSetModuleClkParent( moduleId, clkId, clkId+i+1, SCICLIENT_SERVICE_WAIT_FOREVER); /* Check if the clock can be set to desirable freq. */ if (status == LLD_PASS) { moduleClockParentChanged = 1U; } } if (status == LLD_PASS) { status = Sciclient_pmQueryModuleClkFreq(moduleId, clkId, clkRate, &respClkRate, SCICLIENT_SERVICE_WAIT_FOREVER); } if ((status == LLD_PASS) && (respClkRate == clkRate)) { foundParent = 1U; break; } } } if (foundParent == 1U) { /* Set the clock at the desirable frequency*/ status = Sciclient_pmSetModuleClkFreq( moduleId, clkId, clkRate, TISCI_MSG_FLAG_CLOCK_ALLOW_FREQ_CHANGE, SCICLIENT_SERVICE_WAIT_FOREVER); } else { status = LLD_EFAIL; } if ((status == LLD_PASS) && (clockStatus == TISCI_MSG_VALUE_CLOCK_SW_STATE_UNREQ)) { /* Restore the clock again to original state */ status = Sciclient_pmModuleClkRequest( moduleId, clkId, clockStatus, 0U, SCICLIENT_SERVICE_WAIT_FOREVER); } if ((status != LLD_PASS) && (moduleClockParentChanged == 1U)) { /* Setting the original parent if failure */ status = Sciclient_pmSetModuleClkParent( moduleId, clkId, origParent, SCICLIENT_SERVICE_WAIT_FOREVER); } if (status == 0) { status = Sciclient_pmGetModuleClkFreq(moduleId, clkId, &freqHz, SCICLIENT_SERVICE_WAIT_FOREVER); AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, " Module clock frequency set. Module = %d , Freq = %llu !!!\n",moduleId, freqHz); retVal=E_OK; } else { AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, " Module clock frequency setting failed !!!\n"); retVal = E_NOT_OK; } } else { AppUtils_Printf(APP_UTILS_PRINT_MSG_NORMAL, " Sciclient is not initialized !!!\n"); } return (retVal); }
此致
Tarun Mukesh
你好、Tarun、
是的我使用的 API 相同,但我必须传递哪些正确的参数?
现在传递的参数是
moduleid 是 TISCI_DEV_MCU_MCSPI0、
CLKID 为 TISCI_DEV_MCU_MCSPI0_VBUSP_CLK
clkRate 为2000000 (对于2MHz)
类型 MCU_CB_API (App_Implementation moduleId、uint32 clkId、uint64 clkRate) 仍然无法通过以下 Std_Return、其中返回-1值。
状态= Sciclient_pmQueryModuleClkFreq (moduleId、
clkId、
clkRate、
respClkRate、(&R)
SCICLIENT_SERVICE_WAIT_FOREVER);
此致、
Satya。
您好:
没问题。 您能否在下周二上午11点至12点举行3/6/25的会议?
此致
Tarun Mukesh
你好、Tarun、
感谢电话支持、正如我们所讨论的、我进行了必要的更改。
1.无时钟配置、默认为50 MHz 和分频器 I 配置为49、因此我可以在 SPI_SCK 线路上看到1 MHz 时钟。
2. D0用于 SPI 数据输出 和 D1用于 SPI 数据输入、I 请参阅、在 D0引脚上存在总线上的数据、但在尝试从 SJA1124 NXP LIN 芯片读取数据时、未将 D1引脚上的数据视为输入数据。
此 SysConfig 对于 MCU_SPI0是否正确?
中断路由器配置是否是接收数据所必需的?
根据原理图、D1是相对于 SOC 的数据输入、D0是数据输出。
.mcspi =
{
.csEnable =(uint16) true、
.csMode = SPI_Continuous、
.csPolarity = SPI_HIGH、
.csIdleTime = SPI_DATADELAY_0、
.clkDivider = 49u、
.clkMode = SPI_CLK_MODE_0、
.txRxMode = SPI_TX_RX_MODE_BOTH、
.startBitEnable =(uint16) false、
.startBitLevel = SPI_LOW、
.receptionLineEnable = DATA_LINE_1_RECEIVE、
.transmissionLineEnable = DATA_LINE_0_TRANSFISION、
}、
您好:
1. 无时钟配置、默认为50 MHz 和分频器 I 配置为49、因此我可以在 SPI_SCK 线路上看到1 MHz 时钟。
好极了。
[引述 userid="635888" url="~/support/processors-group/processors/f/processors-forum/1516134/dra829v-ep2000-main2_1-how-to-use-mcu_spi0-in-main2_1-core/5851858 #5851858"]2. D0用于 SPI 数据输出 和 D1用于 SPI 数据输入、I 请参阅、在 D0引脚上存在总线上的数据、但在尝试从 SJA1124 NXP LIN 芯片读取数据时、未将 D1引脚上的数据视为输入数据。
此 SysConfig 对于 MCU_SPI0是否正确?
中断路由器配置是否是接收数据所必需的?
[/报价]您的 SysConfig 在 MCU_SPI0中查找正确。
是的、由于您从 MCU2_1访问 MCU_SPI0、因此必须配置中断路由器才能将数据接收到 Rx 缓冲区/NXP FIFO 中。但是、您的测试点应该会显示一些数据、因为它位于线路上、请确保 SJA1124 Rx 芯片正在发送数据。
此致
Tarun Mukesh