打印

请教一下中断的操作问题....

[复制链接]
5145|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sjpu|  楼主 | 2009-5-15 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
板子终于出来了,可在调试时始终不能进入中断,系统时钟的和外部中断都一样。先贴出系统时钟的配置代码,望大虾们给指点指点,谢谢!

沙发
sjpu|  楼主 | 2009-5-15 10:26 | 只看该作者

相关函数



/* ##################################    SysTick function  ############################################ */
//========================位于core_cm3.h文件==================================

/* SysTick constants */
#define SYSTICK_ENABLE              0                                          /* Config-Bit to start or stop the SysTick Timer                         */
#define SYSTICK_TICKINT             1                                          /* Config-Bit to enable or disable the SysTick interrupt                 */
#define SYSTICK_CLKSOURCE           2                                          /* Clocksource has the offset 2 in SysTick Control and Status Register   */
#define SYSTICK_MAXCOUNT       ((1<<24) -1)                                    /* SysTick MaxCount                                                      */

/**
 * @brief  Initialize and start the SysTick counter and its interrupt.
 *
 * @param  uint32_t ticks is the number of ticks between two interrupts
 * @return  none
 *
 * Initialise the system tick timer and its interrupt and start the
 * system tick timer / counter in free running mode to generate
 * periodical interrupts.
 */
static __INLINE uint32_t SysTick_Config(uint32_t ticks)
{
  if (ticks > SYSTICK_MAXCOUNT)  return (1);                                                /* Reload value impossible */

  SysTick->LOAD  =  (ticks & SYSTICK_MAXCOUNT) - 1;                                         /* set reload register */
  NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);                               /* set Priority for Cortex-M0 System Interrupts */
  SysTick->VAL   =  (0x00);                                                                 /* Load the SysTick Counter Value */
  SysTick->CTRL = (1 << SYSTICK_CLKSOURCE) | (1<<SYSTICK_ENABLE) | (1<<SYSTICK_TICKINT);    /* Enable SysTick IRQ and SysTick Timer */
  return (0);                                                                               /* Function successful */
}


//================================================================================



#define SYSCLK_FREQ  72000000


int main(void)
{
  .......
  SysTick_Config(SYSCLK_FREQ/100); //10mS
  .......
 
 
 while(1)
 {
  .......
 } 
 
}
  
  
void SysTick_Handler(void)
{
 .....
}
 
//===================================================================
//向量表文件
        ;; Forward declaration of sections.
        SECTION .intvec:CODE:NOROOT(2)

        EXTERN  __iar_program_start
        PUBLIC  __vector_table

        DATA
__intial_sp      EQU     0x2000fff0
__vector_table
        DCD     __intial_sp
        DCD     __iar_program_start

        DCD     NMI_Handler               ; NMI Handler
        DCD     HardFault_Handler         ; Hard Fault Handler
        DCD     MemManage_Handler         ; MPU Fault Handler
        DCD     BusFault_Handler          ; Bus Fault Handler
        DCD     UsageFault_Handler        ; Usage Fault Handler
        DCD     0                         ; Reserved
        DCD     0                         ; Reserved
        DCD     0                         ; Reserved
        DCD     0                         ; Reserved
        DCD     SVC_Handler               ; SVCall Handler
        DCD     DebugMon_Handler          ; Debug Monitor Handler
        DCD     0                         ; Reserved
        DCD     PendSV_Handler            ; PendSV Handler
        DCD     SysTick_Handler           ; SysTick Handler
       
       ............
        
 
        PUBWEAK SysTick_Handler
        SECTION .text:CODE:REORDER(1)
SysTick_Handler
        B SysTick_Handler        //systick_irq
        
        ...............
         
              
              

使用特权

评论回复
板凳
sjpu|  楼主 | 2009-5-15 16:09 | 只看该作者

自己顶起来。

调试时始终不能进入中断,SysTick 和外部中断都一样不能产生中断。

使用特权

评论回复
地板
香水城| | 2009-5-15 22:12 | 只看该作者

初始化NVIC模块了吗?

请参考一下STM32固件库中的例程吧。

使用特权

评论回复
5
sjpu|  楼主 | 2009-5-16 10:01 | 只看该作者

初始化了

参照固件库例程,该设置的寄存器都设置了。

//各中断的优先级定义
#define Sys_TickPri           0
#define Exit8_IntPri          3 //power down
#define Spi1_Txd_IntPri       4 //驱动数据发送中断
#define Exit10_IntPri         5 //花型接收中断 u1_txd
#define U2_Rxd_Dma_Intpri     6 //QEI接收中断
#define Spi2_DmaTxd_IntPri    7 //通讯发送DMA中断


void Nvic_Init(void)
{
  NVIC_SetPriorityGrouping(NVIC_PriorityGroup_4);  //16级抢占优先级,1级子优先级。

  NVIC_SetPriority(EXTI9_5_IRQn,Exit8_IntPri);//
  NVIC_SetPriority(SPI1_IRQn, Spi1_Txd_IntPri);
  NVIC_SetPriority(EXTI15_10_IRQn, Exit10_IntPri);
  NVIC_SetPriority(USART2_IRQn, U2_Rxd_Dma_Intpri);
  NVIC_SetPriority(DMA1_Channel5_IRQn, Spi2_DmaTxd_IntPri);
  NVIC_SetPriority(CPU_INT_SYSTICK,Sys_TickPri);

  NVIC_ClearPendingIRQ(EXTI9_5_IRQn);
  NVIC_ClearPendingIRQ(SPI1_IRQn);
  NVIC_ClearPendingIRQ(EXTI15_10_IRQn);
  NVIC_ClearPendingIRQ(USART2_IRQn);
  NVIC_ClearPendingIRQ(DMA1_Channel5_IRQn);
  NVIC_ClearPendingIRQ(SPI3_IRQn);

  NVIC_EnableIRQ(EXTI9_5_IRQn );
  NVIC_EnableIRQ(SPI1_IRQn );
  NVIC_EnableIRQ(EXTI15_10_IRQn );
  NVIC_EnableIRQ(USART2_IRQn );
  NVIC_EnableIRQ(DMA1_Channel5_IRQn);
 }

使用特权

评论回复
6
sjpu|  楼主 | 2009-5-16 10:14 | 只看该作者

继续请教香版主:

调试时,ICSR寄存器中,SYSTICK中断标志已经设置了,而且TICKINT中断允许也设置了,可就是不能产生中断,为什么呢?现在两块不同的板子(一块是103RET6,一块是103ZET6),两个不同的人做的程序,都犯这个同样的毛病,而且程序在万利的板子上跑又没问题。

使用特权

评论回复
7
香水城| | 2009-5-16 10:26 | 只看该作者

既然在板子上跑没问题,那你的问题是什么呢?

前面说没有中断,后面又说没有问题,把我搞糊涂了。

使用特权

评论回复
8
sjpu|  楼主 | 2009-5-16 10:49 | 只看该作者

问题依旧

是在我自己做的的板子上中断不能正常跑,而在万利的板子上却能够正常进中断。我却找不出问题所在

使用特权

评论回复
9
sjpu|  楼主 | 2009-5-16 10:50 | 只看该作者

2+1

两块自己做的板子,一块万利的板子。两块自己做的板子都犯同样的毛病。

使用特权

评论回复
10
渤海三叠浪| | 2009-5-16 10:58 | 只看该作者

回!

同样的程序在人家的板子没有问题,在你的板子有问题。是不是可以说明你的板子的硬件有问题呢?

使用特权

评论回复
11
sjpu|  楼主 | 2009-5-16 11:08 | 只看该作者

SYSTICK在内核中,与外部没多大联系吧?

只要电源电压稳定,外部振荡器或者系统时钟频率稳定,我想内核的东东都应该可以正常运行了吧,而且现在初步调试板子对IO端口操作都没问题。

使用特权

评论回复
12
liwenz| | 2010-12-8 10:13 | 只看该作者
cpu版本是不是不一样呢

使用特权

评论回复
13
jgphu| | 2010-12-8 17:40 | 只看该作者
不细致的结果

使用特权

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

本版积分规则

22

主题

62

帖子

2

粉丝