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.

SYSCTL_PIN_MC_FAULT0是时钟输出吗?怎么配置,时钟输出哪个口了?

Other Parts Discussed in Thread: TM4C1233H6PM

求指点!求TM4C1233H6PM时钟输出的口和初始化代码!

  • 楼主所说的这个时钟输出IO是指什么呢?是指可配置的一个IO输出不同的频率么,还是?

  • SYSCTL_PIN_MC_FAULT0这个应该是PWM吧,具体要看看寄存器的定义了。

  • 其实情况是这样的,我需要TM4C1233H6PM的某个IO口输出时钟信号,来驱动摄像头采集,最好这个频率是可以设置的!一直找不到哪个IO口能行,目前就关注那个TRCLK?

  • 你的摄像头是用的什么总线呢?看看摄像头的资料,如果没有特别说明,使用任何一个IO模拟时序都可以的。

  • IO翻转模拟时钟信号代码?能推荐下不

  • 直接拉高拉低IO就好了么,另外你网上找找你摄像头的驱动对照下就可以了。

  • 原来摄像头驱动是采用stm的例程,我看了的,主要是视频采集需要采集时钟输入,频率大概要10M以上。那目前采用TM4C的函数GPIOPinWrite,可能达不到10M以上的翻转速度吧!

  • 10M的翻转速度松松的,你可以用Address masking的方法对一个IO进行操作。我试了一下,主频在50MHz是,用AHP总线操作IO,可以达到12M以上的反转速度。

    下面给出了通过AHB总线和Adress masking操作PG7的代码例子。
    
    首先要在GPIO High-Performance Bus控制寄存器中使能PG口的AHP总线:
    
    HWREG(SYSCTL_GPIOHBCTL) |=  (1 << (SYSCTL_PERIPH_GPIOG & 0xF));
    
    然后将PG7配置为输出后,就可以使用Address masking进行操作了:
    
    HWREG(GPIO_PORTG_AHB_BASE + (GPIO_O_DATA + (GPIO_PIN_7 << 2))) = GPIO_PIN_7;         //PG7 = H
    
    HWREG(GPIO_PORTG_AHB_BASE + (GPIO_O_DATA + (GPIO_PIN_7 << 2))) = 0;                              //PG7 = L
  • 你好!还想继续问下,那个(好像是在PF3口)TRCLK这个引脚是不是能输出时钟频率,而且可调的?如果是的话,那他的初始化设置是怎么样的?或者说有没有这个的例程!?

  • 如果你想输出可调时钟频率的话,用自带的PWM是个不错的想法,需要用到的引脚如下

     

     

  • PWM的例程如下

    //PWM实验程序解析
    //头文件
    #include <stdint.h>
    #include <stdbool.h>
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/rom.h"
    #include "driverlib/gpio.h"
    #include "driverlib/pwm.h"
    #include "driverlib/fpu.h"
    #include "driverlib/pin_map.h"
    
    int main (void)
    {
      //使能FPU
      FPUEnable();
      FPULazyStackingEnable();
    
      //设置系统时钟为50MHz
      SysCtlClockSet(SYSCTL_SYSDIV_4 |SYSCTL_USE_PLL 
    |SYSCTL_OSC_MAIN |SYSCTL_XTAL_16MHZ);
    
      //使能PWM模块
      ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM); 
      //使能PWM2和PWM3输出所在GPIO
      ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); 
      //配置PH0/PH1为PWM功能
      ROM_GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_0); 
      ROM_GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_1); 
    
      // PWM时钟配置:不分频
      ROM_SysCtlPWMClockSet(SYSCTL_PWMDIV_1); 
      //配置PWM发生器1:加减计数 
      ROM_PWMGenConfigure(PWM_BASE,     
                        PWM_GEN_0,PWM_GEN_MODE_UP_DOWN 
    | PWM_GEN_MODE_NO_SYNC);
       //设置PWM发生器1的周期 
      ROM_PWMGenPeriodSet(PWM_BASE, PWM_GEN_0, 6000); 
      //设置PWM2/PWM3输出的脉冲宽度
      ROM_PWMPulseWidthSet(PWM_BASE, PWM_OUT_0, 4200); 
      ROM_PWMPulseWidthSet(PWM_BASE, PWM_OUT_1, 1800);
      //使能PWM2和PWM3的输出 
      ROM_PWMOutputState(PWM_BASE, (PWM_OUT_0_BIT | 
                           PWM_OUT_1_BIT), true);
      //使能PWM发生器1
      ROM_PWMGenEnable(PWM0_BASE, PWM_GEN_0); 
    
    while(1);
       {
       }
    }
    
    

  • 非常感谢你的回复,那其实我还是想知道TRCLK这个引脚是干什么的,手册上是频率跟踪输出口?

    然后就是

    ROM_GPIOPinTypePWM(GPIO_PORTH_BASE, GPIO_PIN_0);这句我换为PD0口,时钟都初始化了,
    
    
     ROM_PWMGenConfigure(PWM_BASE,     
                        PWM_GEN_0,PWM_GEN_MODE_UP_DOWN 
    | PWM_GEN_MODE_NO_SYNC); 这句就跳到ISR_FAULT里!
  • 现在才看到你的这个帖子,这个TRCLK应该是调试时候用的,对接内核调试的。不能直接输出固定频率的信号的。