打印

LPC1754中断关闭后,任然影响其它程序运行时间吗?

[复制链接]
1603|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyb2002|  楼主 | 2011-5-24 10:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LPC, AD, dc, ADC, se
如题,请指教:
//---------------------------------------------------
// CPU: LPC1754
// #define XTAL        (12000000UL)        /* Oscillator frequency */
// SystemFrequency = 72Mhz
//---------------------------------------------------
U16 gAdBuf[ 1024 ];  // 全局变量, Ad 值 buf.
/******************************************************************************************************/
// 下面的程序运行时,大约10来个循环会有一两个通道 AD 值明显错误,怀疑是时序改变了。
/******************************************************************************************************/
//---------------------------------------------------
// 描述:读取 1024 个通道的 AD 值。
// 参数:无
// 返回:无
// 受影响的全局变量:gAdBuf
//---------------------------------------------------
void ScanAll( void )
{
  U32 j,k;

  NVIC_DisableIRQ( USB_IRQn ); // 关 USB 中断,经查看 ISER0 和 ISER1 寄存器值正确。
   
  for( k = 0; k < 10000; k++ ); // 害怕写寄存器后,不能马上关闭中断,在此加长延时。
  
  for( i = 0; i < 1024; i++ )
  {
   OpenChannel( i );       // 打开通路.
//=================================================================================
   for( k = 0; k < 350; k++ );  // 必须保证每次扫描,本句代码运行时间一致!!!!!!!
//=================================================================================
   ADCstart( );
   while( ADCisEnd( ) == 0 );
   Adcstop( );
   gAdBuf = ReadAdcValue( );
  }
  NVIC_EnableIRQ( USB_IRQn );
}
int main ( void )
{
//...............
  NVIC_EnableIRQ( USB_IRQn ); // 整个程序只用到 USB 中断. 经查看 ISER0 和 ISER1 寄存器值正确。
//...............
  while( __TRUE )
  {
    ScanAll( );
  }
}
/******************************************************************************************************/
// 如果从不用中断,测试结果完全正常,代码如下。
/******************************************************************************************************/
//---------------------------------------------------
// 描述:读取 1024 个通道的 AD 值。
// 参数:无
// 返回:无
// 受影响的全局变量:gAdBuf
//---------------------------------------------------
void ScanAll( void )
{
  U32 j,k;
  for( i = 0; i < 1024; i++ )
  {
   OpenChannel( i );       // 打开通路.
   for( k = 0; k < 350; k++ );  // 必须保证每次扫描,本句代码运行时间一致.
   ADCstart( );
   while( ADCisEnd( ) == 0 );
   Adcstop( );
   gAdBuf = ReadAdcValue( );
  }
}
int main ( void )
{
//...............
//  NVIC_EnableIRQ( USB_IRQn ); // 整个程序不用任何中断.
//...............
  while( __TRUE )
  {
    ScanAll( );
  }
}
//---------------------------------------------------------------------------------------

相关帖子

沙发
zyb2002|  楼主 | 2011-5-24 11:15 | 只看该作者
问题解决了,我就是个SB。 USB 信号线离摸拟信号太近了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

71

帖子

1

粉丝