求指点!求TM4C1233H6PM时钟输出的口和初始化代码!
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.
其实情况是这样的,我需要TM4C1233H6PM的某个IO口输出时钟信号,来驱动摄像头采集,最好这个频率是可以设置的!一直找不到哪个IO口能行,目前就关注那个TRCLK?
你的摄像头是用的什么总线呢?看看摄像头的资料,如果没有特别说明,使用任何一个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实验程序解析
//头文件
#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应该是调试时候用的,对接内核调试的。不能直接输出固定频率的信号的。