主题: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