我尝试使用LPC4370的GPIO来产生一对长度200ns左右的Push,Pull脉冲。一开始我使用定时器中断嵌套GPIO控制的方法实现,但观察示波器发现这种方法实现的脉冲宽度非常不稳定,能明显观察到既有ns级别的脉冲也有us级别的脉冲,并且无法控制。我尝试分析问题,但是无从下手,希望有人能够帮忙提供解决方法,或者帮忙指出问题出在哪里。这是我的中断函数,
其余相关代码及图像在楼下附上。
void TIMER2_IRQHandler(void)
{
/* Clear timer interrupt */
Chip_TIMER_ClearMatch(LPC_TIMER2, 1);
*gpnot = 0x02;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x40;
}
Hi @Maf33
生成对齐互补的脉冲,请参考: https://www.nxp.com/docs/en/application-note/AN11538.zip
这个应用笔记基本涵盖了了SCTimer所有基本的用法。
BR
Alice
您好,非常感谢回复@Alice_Yang
我这边对push和pull的时序有要求,我之前的尝试过程中,sct的pwm控制的话好像无法做到边沿对齐(50ns以内的延迟也可以)并且发射三个脉冲?我不是很确定,也许只是我sct的做法不对?motorcontrolpwm功能似乎可以达成要求,但很可惜只在bga256封装的LPC4370上面支持,我所使用的是bga100的封装版本。微信图片_20250723160804.jpg
我的实际工程中需要HSADC配合定时器触发,当我试着产生仅仅一个脉冲的情况下,仍然无法产生200ns的脉冲,大部分时候产生的都是1us多的脉冲,甚至同样的延时方法无法得到相同的延时(包括NOP)。在一些测试中,可以在示波器上同时看到200ns的脉冲和1us的脉冲。
微信图片_20250723113904.jpg
微信图片_20250723111230.jpg
我一开始怀疑问题出在定时器,于是我将定时器移除,使用单纯的for循环的来实现周期,这样可以达成我的需求:产生200ns宽度的Push Pull脉冲各三个,但当我用同样的方法将脉冲个数提高到四个甚至更多的时候,就又不受控制了,从图片中可以很明显看到,200ns的脉冲宽度直接变成了不同长度的us级别脉冲。
#define TICKRATE_HZ 1000
volatile uint32_t *gpset = &LPC_GPIO_PORT->SET[1];
volatile uint32_t *gpclr = &LPC_GPIO_PORT->CLR[1];
volatile uint32_t *gpnot = &LPC_GPIO_PORT->NOT[1];
int main(void){
/* —— 时钟与板级初始化 —— */
SystemCoreClockUpdate();
Board_Init();
DEBUGOUT("SystemCoreClock = %d Hz\r\n", SystemCoreClock);
// Chip_GPIO_Init(LPC_GPIO_PORT);
DEBUGSTR("GPIO driver init done\r\n");
/* —— PUSH: GPIO1[1] 输出 —— */
Chip_SCU_PinMux(1, 8, MD_EHS, FUNC0);
LPC_GPIO_PORT->DIR[1] |= 1<<1;
/* —— PULL: GPIO1[6] 输出 —— */
Chip_SCU_PinMux(1, 13, MD_EHS, FUNC0);
LPC_GPIO_PORT->DIR[1] |= 1<<6;
*gpset=0x42;
while (1) {
for(int i=0;i<180000;i++){}
*gpnot = 0x02;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x42;
for(int j=0;j<2;j++){}
*gpnot = 0x40;
}
return 0;
}
微信图片_20250723112957.jpg
微信图片_20250723112739.jpg