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.
TRM 如下图所示、但使用具有 CLB5.0输出的 GPIO32时、无论 GPyDIR 位的状态如何、I 都似乎观察到 CLB 输出。
GPIO 输出在更改 GPTMUX1和 GPTMUX1时会发生变化、因此 CLB-output-Xbar 将转到多路复用器、但显示的 TIR 状态缓冲器似乎被忽略。
此外、我似乎无法将逻辑块输出 CLB5.0路由到任何其他 GPIO、例如 GPIO 41不会产生输出(保持零) 、当我路由到 GPIO32时我会观察到该输出、但确实会对 XBAR_invertOutputSignal (...)做出反应 相当令人困惑……
尊敬的 Alexy:
将 GPIO32配置为输入时、多路复用器选项中是否选择了标准 GPIO 设置?
您能否共享您正在写入的代码以将 CLB 输出发送到 GPIO41?
谢谢!
卢克
您好 Luke、我只是更改了 GPBDIR 寄存器、我怀疑从多路复用器到 GPBDIR 的额外线路会覆盖我的设置? 看起来我无法将 SysConfig 附加到该消息、但我会尝试将其作为代码发布-其中包含我尝试进行的用于正常运行的完整配置。
/** * These arguments were used when this file was generated. They will be automatically applied on subsequent loads * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments. * @cliArgs --board "/boards/LAUNCHXL_F28P65X" --context "CPU1" --product "C2000WARE@5.01.00.00" * @versions {"tool":"1.19.0+3426"} */ /** * Import the modules used in this configuration. */ const adc = scripting.addModule("/driverlib/adc.js", {}, false); const adc1 = adc.addInstance(); const adc2 = adc.addInstance(); const adc3 = adc.addInstance(); const analog = scripting.addModule("/driverlib/analog.js", {}, false); const analog1 = analog.addInstance(); const asysctl = scripting.addModule("/driverlib/asysctl.js"); const led = scripting.addModule("/driverlib/board_components/led", {}, false); const led1 = led.addInstance(); const clb = scripting.addModule("/driverlib/clb.js", {}, false); const clb1 = clb.addInstance(); const clb_outputxbar = scripting.addModule("/driverlib/clb_outputxbar.js", {}, false); const clb_outputxbar1 = clb_outputxbar.addInstance(); const clb_outputxbar2 = clb_outputxbar.addInstance(); const clb_outputxbar3 = clb_outputxbar.addInstance(); const dac = scripting.addModule("/driverlib/dac.js", {}, false); const dac1 = dac.addInstance(); const device_support = scripting.addModule("/driverlib/device_support.js"); const epwm = scripting.addModule("/driverlib/epwm.js", {}, false); const epwm1 = epwm.addInstance(); const epwm2 = epwm.addInstance(); const epwm3 = epwm.addInstance(); const epwmxbar = scripting.addModule("/driverlib/epwmxbar.js", {}, false); const epwmxbar1 = epwmxbar.addInstance(); const gpio = scripting.addModule("/driverlib/gpio.js", {}, false); const gpio2 = gpio.addInstance(); const gpio3 = gpio.addInstance(); const spi = scripting.addModule("/driverlib/spi.js", {}, false); const spi1 = spi.addInstance(); const sync = scripting.addModule("/driverlib/sync.js"); const TILE = scripting.addModule("/utilities/clb_tool/clb_syscfg/source/TILE", {}, false); const TILE1 = TILE.addInstance(); /** * Write custom configuration values to the imported modules. */ adc1.$name = "ADC_iSEN_A"; adc1.adcClockPrescaler = "ADC_CLK_DIV_4_0"; adc1.adcBase = "ADCB_BASE"; adc1.enabledSOCs = ["ADC_SOC_NUMBER0"]; adc1.soc0Channel = "ADC_CH_ADCIN7"; adc1.soc0Name = "SOC_ISEN_A"; adc1.soc0SampleWindow = 15; adc1.enabledInts = ["ADC_INT_NUMBER1"]; adc1.enableInterrupt1 = true; adc1.registerInterrupts = ["1"]; adc1.soc0Trigger = "ADC_TRIGGER_EPWM5_SOCA"; adc1.adcInt1.enableInterrupt = true; adc2.$name = "ADC_ISEN_B"; adc2.socHighPriorityMode = "ADC_PRI_SOC0_HIPRI"; adc2.enabledSOCs = ["ADC_SOC_NUMBER0"]; adc2.soc0Channel = "ADC_CH_ADCIN7"; adc2.soc0SampleWindow = 15; adc2.adcClockPrescaler = "ADC_CLK_DIV_4_0"; adc2.soc0Trigger = "ADC_TRIGGER_EPWM5_SOCA"; adc3.$name = "ADC_ISEN_C"; adc3.adcBase = "ADCC_BASE"; adc3.adcClockPrescaler = "ADC_CLK_DIV_4_0"; adc3.enabledSOCs = ["ADC_SOC_NUMBER0"]; adc3.soc0IndependentNameMode = true; adc3.soc0Channel = "ADC_CH_ADCIN4"; adc3.soc0SampleWindow = 15; adc3.interruptPulseMode = "ADC_PULSE_END_OF_CONV"; adc3.registerInterrupts = ["1"]; adc3.useInterrupts = false; adc3.soc0Trigger = "ADC_TRIGGER_EPWM5_SOCA"; asysctl.analogReference = "INTERNAL"; asysctl.analogReferenceVoltage = "1P65"; led1.$name = "myBoardLED0"; led1.gpio.$hardware = system.deviceData.board.components.LED4; clb1.$name = "myCLB0"; clb1.enableCLB = true; clb1.localConfigCLB_IN0 = "CLB_LOCAL_IN_MUX_INPUT1"; clb1.attachTile = true; clb1.initTile = true; clb1.globalConfigCLB_IN0 = "CLB_GLOBAL_IN_MUX_EPWM5A"; clb1.synchronizeCLB_IN0 = true; clb1.inputTypeCLB_IN1 = "GLOBAL"; clb1.inputsUsed = ["CLB_IN0"]; clb1.inputTypeCLB_IN0 = "GLOBAL"; clb1.clbBase = "CLB5_BASE"; clb_outputxbar1.$name = "myCLB_OUTPUTXBAR0"; clb_outputxbar1.mux5Config = "XBAR_OUT_MUX05_CLB5_OUT5"; clb_outputxbar1.useSourceSelect = true; clb_outputxbar1.sourceSignals = ["CLB5_OUT0","CLB5_OUT7"]; clb_outputxbar1.clb_outputxbar.$assign = "CLB_OUTPUTXBAR7"; clb_outputxbar1.clb_outputxbar.clb_outputxbarPin.$assign = "boosterpack2.53"; clb_outputxbar2.$name = "myCLB_OUTPUTXBAR1"; clb_outputxbar2.useSourceSelect = true; clb_outputxbar2.sourceSignals = ["CLB5_OUT0"]; clb_outputxbar2.clb_outputxbar.$assign = "CLB_OUTPUTXBAR1"; clb_outputxbar2.clb_outputxbar.clb_outputxbarPin.$assign = "boosterpack2.74"; clb_outputxbar3.$name = "myCLB_OUTPUTXBAR2"; clb_outputxbar3.mux8Config = "XBAR_OUT_MUX08_XTRIP_OUT3"; clb_outputxbar3.mux9Config = "XBAR_OUT_MUX09_XTRIP_OUT4"; clb_outputxbar3.mux10Config = "XBAR_OUT_MUX10_CLB6_OUT2"; clb_outputxbar3.mux11Config = "XBAR_OUT_MUX11_CLB6_OUT3"; clb_outputxbar3.mux12Config = "XBAR_OUT_MUX12_CLB6_OUT4"; clb_outputxbar3.mux13Config = "XBAR_OUT_MUX13_CLB6_OUT5"; clb_outputxbar3.mux14Config = "XBAR_OUT_MUX14_CLB6_OUT6"; clb_outputxbar3.mux15Config = "XBAR_OUT_MUX15_CLB6_OUT7"; clb_outputxbar3.mux16Config = "XBAR_OUT_MUX16_XTRIP_OUT5"; clb_outputxbar3.mux17Config = "XBAR_OUT_MUX17_XTRIP_OUT6"; clb_outputxbar3.mux24Config = "XBAR_OUT_MUX24_XTRIP_OUT7"; clb_outputxbar3.mux25Config = "XBAR_OUT_MUX25_XTRIP_OUT8"; clb_outputxbar3.mux30Config = "XBAR_OUT_MUX30_EPG1_OUT2"; clb_outputxbar3.mux31Config = "XBAR_OUT_MUX31_EPG1_OUT3"; clb_outputxbar3.mux1Config = "XBAR_OUT_MUX01_CLB5_OUT1"; clb_outputxbar3.mux2Config = "XBAR_OUT_MUX02_CLB5_OUT2"; clb_outputxbar3.mux3Config = "XBAR_OUT_MUX03_CLB5_OUT3"; clb_outputxbar3.mux4Config = "XBAR_OUT_MUX04_CLB5_OUT4"; clb_outputxbar3.mux5Config = "XBAR_OUT_MUX05_CLB5_OUT5"; clb_outputxbar3.mux6Config = "XBAR_OUT_MUX06_CLB5_OUT6"; clb_outputxbar3.mux7Config = "XBAR_OUT_MUX07_CLB5_OUT7"; clb_outputxbar3.sourceSignals = ["CLB5_OUT0"]; clb_outputxbar3.useSourceSelect = true; clb_outputxbar3.clb_outputxbar.$assign = "CLB_OUTPUTXBAR2"; const divider4 = system.clockTree["CLBCLKDIV"]; divider4.divideValue = 2; dac1.$name = "myDACA"; dac1.enableOutput = true; dac1.referenceVoltage = "DAC_REF_ADC_VREFHI"; dac1.gainMode = "DAC_GAIN_TWO"; analog1.$name = "myANALOGPinMux0"; dac1.analog = analog1; analog1.useCase = "CUSTOM"; adc1.analog = analog1; analog1.useInterfacePins = ["A0/DACA_OUT","A7, GPIO210","B6, GPIO207","B7, GPIO208","C4, GPIO205"]; adc2.analog = analog1; adc3.analog = analog1; device_support.build = "Release"; epwm1.epwmTimebase_hsClockDiv = "EPWM_HSCLOCK_DIVIDER_1"; epwm1.epwmTimebase_counterMode = "EPWM_COUNTER_MODE_UP_DOWN"; epwm1.epwmCounterCompare_cmpA = 500; epwm1.epwmDigitalCompare_EPWM_DC_TYPE_DCAH = "EPWM_DC_TRIP_TRIPIN4"; epwm1.epwmDigitalCompare_EPWM_TZ_DC_OUTPUT_A1 = "EPWM_TZ_EVENT_DCXH_HIGH"; epwm1.epwmTripZone_EPWM_TZ_ACTION_EVENT_TZA = "EPWM_TZ_ACTION_LOW"; epwm1.epwmTripZone_oneShotSource = ["EPWM_TZ_SIGNAL_DCAEVT1"]; epwm1.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true; epwm1.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar = "1"; epwm1.epwmTimebase_counterModeAfterSync = "EPWM_COUNT_MODE_UP_AFTER_SYNC"; epwm1.epwmTimebase_syncInPulseSource = "EPWM_SYNC_IN_PULSE_SRC_DISABLE"; epwm1.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA = "EPWM_AQ_OUTPUT_LOW"; epwm1.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_HIGH"; epwm1.epwmDeadband_enableRED = true; epwm1.epwmDeadband_enableFED = true; epwm1.epwmDeadband_polarityFED = "EPWM_DB_POLARITY_ACTIVE_LOW"; epwm1.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.PWM_LOC1; epwm1.$name = "pwm1A"; epwm1.epwmTimebase_period = 2000; epwm1.epwmTimebase_syncOutPulseMode = ["EPWM_SYNC_OUT_PULSE_ON_SOFTWARE"]; epwm1.epwmTimebase_forceSyncPulse = true; epwm1.hrpwm_syncSource = "HRPWM_PWMSYNC_SOURCE_ZERO"; epwm1.epwmTimebase_phaseEnable = true; epwm1.epwmTimebase_phaseShift = 500; epwm1.epwmDeadband_delayRED = 40; epwm1.epwmDeadband_delayFED = 40; epwm1.epwmEventTrigger_EPWM_SOC_A_triggerSource = "EPWM_SOC_TBCTR_PERIOD"; epwm2.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.PWM_LOC2; epwm2.$name = "pwm1B"; epwm2.copyUse = true; epwm2.copyFrom = "pwm1A"; epwm2.epwmTimebase_hsClockDiv = "EPWM_HSCLOCK_DIVIDER_1"; epwm2.epwmTimebase_period = 2000; epwm2.epwmTimebase_counterMode = "EPWM_COUNTER_MODE_UP_DOWN"; epwm2.epwmTimebase_counterModeAfterSync = "EPWM_COUNT_MODE_UP_AFTER_SYNC"; epwm2.epwmTimebase_syncOutPulseMode = ["EPWM_SYNC_OUT_PULSE_ON_SOFTWARE"]; epwm2.epwmCounterCompare_cmpA = 500; epwm2.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA = "EPWM_AQ_OUTPUT_LOW"; epwm2.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_HIGH"; epwm2.epwmDeadband_polarityFED = "EPWM_DB_POLARITY_ACTIVE_LOW"; epwm2.epwmDeadband_enableRED = true; epwm2.epwmDeadband_delayRED = 40; epwm2.epwmDeadband_enableFED = true; epwm2.epwmDeadband_delayFED = 40; epwm2.epwmTripZone_EPWM_TZ_ACTION_EVENT_TZA = "EPWM_TZ_ACTION_LOW"; epwm2.epwmTripZone_oneShotSource = ["EPWM_TZ_SIGNAL_DCAEVT1"]; epwm2.epwmDigitalCompare_EPWM_DC_TYPE_DCAH = "EPWM_DC_TRIP_TRIPIN4"; epwm2.epwmDigitalCompare_EPWM_TZ_DC_OUTPUT_A1 = "EPWM_TZ_EVENT_DCXH_HIGH"; epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true; epwm2.epwmEventTrigger_EPWM_SOC_A_triggerSource = "EPWM_SOC_TBCTR_U_CMPA"; epwm2.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar = "1"; epwm2.epwmTimebase_syncInPulseSource = "EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM5"; epwm2.epwmTimebase_periodLink = "EPWM_LINK_WITH_EPWM_5"; epwm2.epwmTimebase_phaseEnable = true; epwm2.epwmTimebase_phaseShift = 500; epwm3.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.PWM_LOC3; epwm3.$name = "pwm1C"; epwm3.copyUse = true; epwm3.copyFrom = "pwm1B"; epwm3.epwmTimebase_hsClockDiv = "EPWM_HSCLOCK_DIVIDER_1"; epwm3.epwmTimebase_period = 2000; epwm3.epwmTimebase_counterMode = "EPWM_COUNTER_MODE_UP_DOWN"; epwm3.epwmTimebase_counterModeAfterSync = "EPWM_COUNT_MODE_UP_AFTER_SYNC"; epwm3.epwmTimebase_syncInPulseSource = "EPWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM5"; epwm3.epwmTimebase_syncOutPulseMode = ["EPWM_SYNC_OUT_PULSE_ON_SOFTWARE"]; epwm3.epwmCounterCompare_cmpA = 500; epwm3.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_UP_CMPA = "EPWM_AQ_OUTPUT_LOW"; epwm3.epwmActionQualifier_EPWM_AQ_OUTPUT_A_ON_TIMEBASE_DOWN_CMPA = "EPWM_AQ_OUTPUT_HIGH"; epwm3.epwmDeadband_polarityFED = "EPWM_DB_POLARITY_ACTIVE_LOW"; epwm3.epwmDeadband_enableRED = true; epwm3.epwmDeadband_delayRED = 40; epwm3.epwmDeadband_enableFED = true; epwm3.epwmDeadband_delayFED = 40; epwm3.epwmTripZone_EPWM_TZ_ACTION_EVENT_TZA = "EPWM_TZ_ACTION_LOW"; epwm3.epwmTripZone_oneShotSource = ["EPWM_TZ_SIGNAL_DCAEVT1"]; epwm3.epwmDigitalCompare_EPWM_DC_TYPE_DCAH = "EPWM_DC_TRIP_TRIPIN4"; epwm3.epwmDigitalCompare_EPWM_TZ_DC_OUTPUT_A1 = "EPWM_TZ_EVENT_DCXH_HIGH"; epwm3.epwmEventTrigger_EPWM_SOC_A_triggerEnable = true; epwm3.epwmEventTrigger_EPWM_SOC_A_triggerSource = "EPWM_SOC_TBCTR_U_CMPA"; epwm3.epwmEventTrigger_EPWM_SOC_A_triggerEventPrescalar = "1"; epwm3.epwmTimebase_periodLink = "EPWM_LINK_WITH_EPWM_5"; epwm3.epwmTimebase_phaseEnable = true; epwm3.epwmTimebase_phaseShift = 500; epwmxbar1.$name = "myEPWMXBAR4"; epwmxbar1.muxesUsed = ["XBAR_MUX02"]; epwmxbar1.tripInput = "XBAR_TRIP4"; gpio2.$name = "spi1CS"; gpio2.direction = "GPIO_DIR_MODE_OUT"; gpio2.writeInitialValue = true; gpio2.initialValue = 1; gpio2.gpioPin.$assign = "boosterpack1.12"; scripting.suppress("Connected to hardware,@@@.+?@@@ is connected to EQEP1 Header on the LaunchPad F28P65X\\. Consider selecting it in 'use hardware' above\\. @@@.+?@@@", gpio2, "gpioPin"); gpio3.$name = "GPIO_drv1_enable"; gpio3.writeInitialValue = true; gpio3.direction = "GPIO_DIR_MODE_OUT"; gpio3.gpioPin.$assign = "boosterpack1.4"; scripting.suppress("Connected to hardware,@@@.+?@@@ is connected to SCIA XDS on the LaunchPad F28P65X\\. Consider selecting it in 'use hardware' above\\. @@@.+?@@@", gpio3, "gpioPin"); spi1.$name = "drvSPI0"; spi1.$hardware = system.deviceData.board.components.BP_SITE_1.subComponents.SPI; spi1.bitRate = 400000; spi1.mode = "SPI_MODE_CONTROLLER"; spi1.spi.$assign = "SPIA"; spi1.spi.spi_picoPin.$assign = "boosterpack1.15"; spi1.spi.spi_pociPin.$assign = "boosterpack1.14"; spi1.spi.spi_clkPin.$assign = "boosterpack1.7"; sync.syncOutSource = "SYSCTL_SYNC_OUT_SRC_EPWM5SYNCOUT"; clb1.tile = TILE1; TILE1.$name = "TILE0_design"; TILE1.pipeline_mode = true; TILE1.tileLock = true; TILE1.BOUNDARY.$name = "BOUNDARY0"; TILE1.LUT_0.$name = "LUT_0"; TILE1.LUT_1.$name = "LUT_1"; TILE1.LUT_2.$name = "LUT_2"; TILE1.FSM_0.$name = "FSM_0"; TILE1.FSM_1.$name = "FSM_1"; TILE1.FSM_2.$name = "FSM_2"; TILE1.COUNTER_0.$name = "COUNTER_0"; TILE1.COUNTER_1.$name = "COUNTER_1"; TILE1.COUNTER_2.$name = "COUNTER_2"; TILE1.OUTLUT_0.$name = "OUTLUT_0"; TILE1.OUTLUT_0.i0 = "BOUNDARY.in0"; TILE1.OUTLUT_0.eqn = "i0"; TILE1.OUTLUT_1.$name = "OUTLUT_1"; TILE1.OUTLUT_1.eqn = "!i0"; TILE1.OUTLUT_1.i0 = "BOUNDARY.in0"; TILE1.OUTLUT_2.$name = "OUTLUT_2"; TILE1.OUTLUT_3.$name = "OUTLUT_3"; TILE1.OUTLUT_4.$name = "OUTLUT_4"; TILE1.OUTLUT_5.$name = "OUTLUT_5"; TILE1.OUTLUT_6.$name = "OUTLUT_6"; TILE1.OUTLUT_7.$name = "OUTLUT_7"; TILE1.OUTLUT_7.eqn = "i0"; TILE1.OUTLUT_7.i0 = "BOUNDARY.in0"; TILE1.HLC.$name = "HLC_0"; TILE1.HLC.program0.$name = "HLCP_0"; TILE1.HLC.program1.$name = "HLCP_1"; TILE1.HLC.program2.$name = "HLCP_2"; TILE1.HLC.program3.$name = "HLCP_3"; TILE1.AOC_0.$name = "AOC_0"; TILE1.AOC_1.$name = "AOC_1"; TILE1.AOC_2.$name = "AOC_2"; TILE1.AOC_3.$name = "AOC_3"; TILE1.AOC_4.$name = "AOC_4"; TILE1.AOC_5.$name = "AOC_5"; TILE1.AOC_6.$name = "AOC_6"; TILE1.AOC_7.$name = "AOC_7"; /** * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future * version of the tool will not impact the pinmux you originally saw. These lines can be completely deleted in order to * re-solve from scratch. */ led1.gpio.gpioPin.$suggestSolution = "boosterpack1.13"; clb_outputxbar3.clb_outputxbar.clb_outputxbarPin.$suggestSolution = "boosterpack2.73"; analog1.analog.$suggestSolution = "ANALOG"; analog1.analog["a0/daca_outPin"].$suggestSolution = "boosterpack1.30"; analog1.analog["a7, gpio210Pin"].$suggestSolution = "boosterpack1.27"; analog1.analog["b6, gpio207Pin"].$suggestSolution = "boosterpack2.68"; analog1.analog["b7, gpio208Pin"].$suggestSolution = "boosterpack1.28"; analog1.analog["c4, gpio205Pin"].$suggestSolution = "boosterpack1.26"; epwm1.epwm.$suggestSolution = "EPWM5"; epwm1.epwm.epwm_aPin.$suggestSolution = "boosterpack1.40"; epwm1.epwm.epwm_bPin.$suggestSolution = "boosterpack1.39"; epwm2.epwm.$suggestSolution = "EPWM4"; epwm2.epwm.epwm_aPin.$suggestSolution = "boosterpack1.38"; epwm2.epwm.epwm_bPin.$suggestSolution = "boosterpack1.37"; epwm3.epwm.$suggestSolution = "EPWM6"; epwm3.epwm.epwm_aPin.$suggestSolution = "boosterpack1.36"; epwm3.epwm.epwm_bPin.$suggestSolution = "boosterpack1.35"; spi1.spi.spi_ptePin.$suggestSolution = "boosterpack1.19";
尊敬的 Alexy:
SysConfig 配置看起来正常。 将此 GPIO 更改为输入时是否启用了上拉电阻器? 如果没有、您能否尝试启用上拉以查看此问题是否仍然存在?
如果多路复用器选择是 CLB 输出 XBAR、为什么要将 GPIO 配置为输入?
谢谢!
卢克
我没有将 GPIO 配置为输入、我尝试使用三态输出。 试图限制问题并理解 GPIO 图、因为我未能将相同的 CLB 输出路由到 GPIO41、无论我将什么设置放入 GPIO 控制寄存器都是如此。 我的实验 显示、GPIO32和 GPIO41之间有很大不同的行为、所以一些基本的东西要么从文档中缺失、要么不是很明显。 谢谢你。
尊敬的 Alexey:
我懂了。 我将在自行开发的 F28P65x Launchpad 上测试此问题。 我明天会回到你身边。
谢谢!
卢克
尊敬的 Alexey:
我能够在我身边重复这个问题。 虽然无法将 CLB 输出发送到 GPIO41、但可以直接写入 GPIO41。 我将联系设计团队、确定 CLBOUTPUTXBAR2是否连接到 GPIO41。
谢谢!
卢克
尊敬的 Alexey:
设计团队确认 CLBOUTPUTXBAR2已连接到 GPIO41、但是我们意识到 CLBOUTPUTXBAR2未连接到 GPIO32、实际上已连接到 GPIO33。 CLBOUTPUTXBAR1连接到 GPIO32。 只是一个供参考的人,如果你不知道这一点。
我认为这是 driverlib 中的问题。 调用 XBAR_setOutputMuxConfig 函数时、它会将 XBAR_OutputNum struct 作为输入参数。 此结构本质上是一个偏移地址、用于确定要写入的寄存器、其中 CLBOUTPUTXBAR1MUX0TO15的地址与所有 CLBOUTPUTXBAR 寄存器的基址相同:
偏移地址应该都是两个的倍数、因为每个 CLBOUTPUXBAR 实例有两个寄存器。 此函数在 CLB OUTPUTXBAR 和 OUTPUTXBAR 模块之间共享。
不过、在 F28P65x 上、我们更新了 OUTPUTXBAR 模块、以便为每个 OUTPUTXBAR 实例提供64个输入多路复用器和4个寄存器、从而更新了 XBAR_setOutputMuxConfig 函数。 然而、CLBOUTPUTXBAR 的格式保持不变(每个 CLBOUTPUTXBAR 实例2个寄存器)。 因此、如果您尝试为 CLBOUTPUTXBAR 调用此函数(SysConfig 会调用此函数)并使用除 CLBOUTPUTXBAR1之外的任何 CLBOUTPUTXBAR 实例、则使用的偏移地址将是其应有值的两倍。 当您尝试通过 SysConfig 配置 CLBOUTPUTXBAR2时、实际上是从寄存器角度配置 CLBOUTPUTXBAR3。 CLBOUTPUTXBAR1上不会发生该问题、因为偏移地址为0、因此将偏移地址加倍不会产生影响。
我将与软件团队合作来修复此问题、并将其包含在4月5日发布的下一个 C2000Ware 中。 如果您需要尽快更新此文件、我可以帮助您在本地纠正此问题。 对于给您带来的不便、我们深表歉意。
谢谢!
卢克
Luke、感谢您的调查、现在很有意义。 短期内、我可以用 Xbar 偏移量除以2来调用 driverlib、它似乎起作用:
XBAR_setOutputMuxConfig1(CLBOUTPUTXBAR_BASE, myCLB_OUTPUTXBAR1/2, XBAR_OUT_MUX00_CLB5_OUT0);
尊敬的 Alexey:
很高兴听到此变通办法解决了问题。 如果您有任何其他问题、请告诉我。
Luke