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.

TMS320DM6437的485串口中断程序

Other Parts Discussed in Thread: TMS320DM6437

哪位大神能惠传一个485串口中断程序给我吗?非bios的,谢谢您的帮助,困扰我很久了,编不出来,又找不到。

  • 非bios的串口中断例程没找到,请问具体碰到什么问题?

  •        我想通过中断来触发485的串口接收,也就是串口检测到有数据输入了,那么就产生中断,然后我在中断程序里面处理接收到的数据,并产生应答。我就是想要一个非BIOS的485串口中断例程,应该会有的,你们有员工都写了这个例程的,我看到有些人的博客里面都有部分这个内容,但是不全,所以,我还是写不出来。

           要不,定时器中断的例程有吗?我看看能不能结合起来,您发我邮箱吧,14866266@qq.com。

           谢谢你的回复。

  • 关键是,我虽然买了合众达的TMS320DM6437的开发板,但是,他们并没有提供给我应该提供的例程,连一个中断的例程都没有啊。

  • 您还在吗?

  • 看一下下面的GPIO中断例程吧。
    http://processors.wiki.ti.com/index.php/Configuring_GPIO_Interrupts

     

  • bin zhu2 说:

           我想通过中断来触发485的串口接收,也就是串口检测到有数据输入了,那么就产生中断,然后我在中断程序里面处理接收到的数据,并产生应答。我就是想要一个非BIOS的485串口中断例程,应该会有的,你们有员工都写了这个例程的,我看到有些人的博客里面都有部分这个内容,但是不全,所以,我还是写不出来。

           要不,定时器中断的例程有吗?我看看能不能结合起来,您发我邮箱吧,14866266@qq.com。

           谢谢你的回复。

    你现在是中断产生了进不了中断子程序还是别的情况?

  •          我连怎么触发中断都不会,应该要分三个部分,一个是CMD文件里面,分配中断向量表位置,二就是写一个中断向量表,三就是在程序里面进行中断的配置,开中断之类的, 然后才是等待中断,进入中断子程序,对吧?我的问题,好吧,CDM文件也不知道写对了没有,中断向量表也是瞎凑,主程序文件里面的配置,也是东拼西凑,编译了之后,就报一堆的错误。

  • 思路是对的。

    中断向量表可以参考下面的写法。

    ;*-----------------------------------------------------------------------------
    ;*
    ;* intvecs.asm
    ;* -----------
    ;*
    ;* Description:
    ;* This file includes a generic setup to map the DSP interrupt service
    ;* table (IST) to the corresponding interrupt service routines (ISR).
    ;*
    ;*-----------------------------------------------------------------------------

    ; Global symbols defined here
    .global _intcVectorTable
    .global _c_int00
    .global _GPIO_BNK0_isr
    .global _TIMER0_12_isr
    .global _TIMER0_34_isr

    ;******************************************************************************
    ;* VEC_ENTRY: Macro that instantiates one entry in the interrupt service table.
    ;******************************************************************************
    VEC_ENTRY .macro addr
    STW B0,*--B15
    MVKL addr,B0
    MVKH addr,B0
    B B0
    LDW *B15++,B0
    NOP 2
    NOP
    NOP
    .endm

    ;******************************************************************************
    ;* vec_dummy: Dummy interrupt service routine used to initialize the IST.
    ;******************************************************************************
    _vec_dummy:
    B B3
    NOP 5

    ;***************************************************************************************
    ;* Map interrupt service table (IST) to corresponding interrupt service routines (ISR)
    ;***************************************************************************************
    .sect ".vecs"
    .align 1024

    _intcVectorTable:
    _vector0: VEC_ENTRY _c_int00 ;RESET
    _vector1: VEC_ENTRY _vec_dummy ;NMI
    _vector2: VEC_ENTRY _vec_dummy ;RSVD
    _vector3: VEC_ENTRY _vec_dummy ;RSVD
    _vector4: VEC_ENTRY _GPIO_BNK0_isr ;DSP Maskable INT4 : Mapped to func 'GPIO_BNK0_isr'
    _vector5: VEC_ENTRY _TIMER0_12_isr ;DSP Maskable INT5 : Mapped to func 'TIMER0_12_isr'
    _vector6: VEC_ENTRY _TIMER0_34_isr ;DSP Maskable INT6 : Mapped to func 'TIMER0_34_isr'
    _vector7: VEC_ENTRY _vec_dummy ;DSP Maskable INT7 : Empty
    _vector8: VEC_ENTRY _vec_dummy ;DSP Maskable INT8 : Empty
    _vector9: VEC_ENTRY _vec_dummy ;DSP Maskable INT9 : Empty
    _vector10: VEC_ENTRY _vec_dummy ;DSP Maskable INT10: Empty
    _vector11: VEC_ENTRY _vec_dummy ;DSP Maskable INT11: Empty
    _vector12: VEC_ENTRY _vec_dummy ;DSP Maskable INT12: Empty
    _vector13: VEC_ENTRY _vec_dummy ;DSP Maskable INT13: Empty
    _vector14: VEC_ENTRY _vec_dummy ;DSP Maskable INT14: Empty
    _vector15: VEC_ENTRY _vec_dummy ;DSP Maskable INT15: Empty

     

  • 非常感谢,还有呢,还有呢,CMD怎么写呢? 对了,女生节快乐。

  • /*
    * Copyright 2006 by Spectrum Digital Incorporated.
    * All rights reserved. Property of Spectrum Digital Incorporated.
    */

    /*
    * Linker command file
    *
    */

    -l rts64plus.lib
    -l ..\..\lib\evmdm6437bsl.lib

    -stack 0x00001000 /* Stack Size */
    -heap 0x00001000 /* Heap Size */

    MEMORY
    {
    L2RAM: o = 0x10800000 l = 0x00020000
    DDR2: o = 0x80000000 l = 0x10000000
    }

    SECTIONS
    {

    .vecs> L2RAM
    .bss > L2RAM
    .cinit > L2RAM
    .cio > L2RAM
    .const > L2RAM
    .data > L2RAM
    .far > L2RAM
    .stack > L2RAM
    .switch > L2RAM
    .sysmem > L2RAM
    .text > L2RAM
    .ddr2 > DDR2
    }

  • hehe ,main()呢? 帮人帮到底嘛.

  • .asm文件里面,编译时出现232个错误

  • bin zhu2 说:

    hehe ,main()呢? 帮人帮到底嘛.



    main()函数里的中断子程序用interrupt定义。如
     interrupt void test_isr (void)

  • bin zhu2 说:

    .asm文件里面,编译时出现232个错误

    中断向量表里要根据你实际用到哪些中断做修改。

    具体报什么错?

  •       中断向量表弄好了,就是顶格啊,不顶格啊,之类的修改,好奇怪哦,CMD文件也写好了。但是,最后还是有个错误一直找不到解决的方法,
          报错的提示是,使用了未定义的子函数,但是这些子函数都是在.H文件中定义过了的,如果不加这个.H文件的话,报错的地方就更多,也就是说.H文件还是加载进去了的,那为什么有些子函数的定义又没有呢,哎。同样的这几个子函数,在另一个程序里面却是工作正常,唯独在这个中断里面就变成了未定义。找了一上午了,还是不知道原因。头晕啊。
           谢谢你,没有你的帮助,中断向量表都写不好。我感觉快写好了,可能解决这个错误就写好了。

  • 请问具体是什么子函数?报错信息方便截图么?

  • 我写的是串口中断,所以就要打开串口,接收数据,发送数据三个子函数,这三个子函数都是在evmdm6437_uart.h里面定义了的。

    另外,EVMDM6438_INIT这个是在evmdm6437.h里面定义了的。

  • 这三个函数的源码是单独写的还是包含在某个lib里的?如果包含在lib里的,要在工程中添加这个库文件。

  • 对,我写CMD的时候,忘记写这个lib了。你厉害。。现在没有错误了。

  •    没报错了,但是,还是没用,不能进入中断,  我说一下,中断的工作过程,你看看对不对。我的是485串口接收中断。

      首先有数据接收了,然后呢,UART0_IER的接收中断允许 肯定是要置1的; 然后,这个信号应该被CPU认为是外部中断事件84,这个外部中断84与CPU的中断优先级别,外部中断源14,连在一起了。然后中断信号就进来了,然后就是IER里面要把外部中断源14置1,然后,再到CSR,CSR要开global interrput.然后就应该中断响应,进入中断程序了吧? 中断向量表的地址我也是设置了的,我还漏了什么吗?    

        CSR=0x100;  //disable all interrupts           
        IER=1;  //disable all interrupts except NMI
        ICR=0xffff;  //clear all pending interrupts 
         ISTP = 0x10800400; //C64X+ VECTORS 指向VECT段需设置ISTP,ISTP=。cmd中设置中断向量表的地址
        INTC_EVTCLR0 = 0xFFFFFFFF;
        INTC_EVTCLR1 = 0xFFFFFFFF;
        INTC_EVTCLR2 = 0xFFFFFFFF;
        INTC_EVTCLR3 =  0xFFFFFFFF;  
        INTC_EVTMASK3 = 0xFFFFFFFF;
        INTC_EVTMASK2 = 0xFFFFFFFF;
        INTC_EVTMASK1 = 0xFFFFFFFF;
        INTC_EVTMASK0 = 0xFFFFFFFF;
        INTC_INTMUX3  = 0x00540000;//EVT65-GPIO01
        UART0_IER=0x11;
        IER |= 0x00004002;
        CSR=0x01 ;    
       串口我也打开了,进入了接收数据状态,然后,我通过串口助手发送了数据给DSP,但是,没有反应,进入不了中断。

       

  • 看一下UART IIR寄存器的INTID位是多少?IFR寄存器的第14位是否为1?表示中断产生了。