哪位大神能惠传一个485串口中断程序给我吗?非bios的,谢谢您的帮助,困扰我很久了,编不出来,又找不到。
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.
bin zhu2 说:我想通过中断来触发485的串口接收,也就是串口检测到有数据输入了,那么就产生中断,然后我在中断程序里面处理接收到的数据,并产生应答。我就是想要一个非BIOS的485串口中断例程,应该会有的,你们有员工都写了这个例程的,我看到有些人的博客里面都有部分这个内容,但是不全,所以,我还是写不出来。
要不,定时器中断的例程有吗?我看看能不能结合起来,您发我邮箱吧,14866266@qq.com。
谢谢你的回复。
你现在是中断产生了进不了中断子程序还是别的情况?
思路是对的。
中断向量表可以参考下面的写法。
;*-----------------------------------------------------------------------------
;*
;* 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
/*
* 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
}
中断向量表弄好了,就是顶格啊,不顶格啊,之类的修改,好奇怪哦,CMD文件也写好了。但是,最后还是有个错误一直找不到解决的方法,
报错的提示是,使用了未定义的子函数,但是这些子函数都是在.H文件中定义过了的,如果不加这个.H文件的话,报错的地方就更多,也就是说.H文件还是加载进去了的,那为什么有些子函数的定义又没有呢,哎。同样的这几个子函数,在另一个程序里面却是工作正常,唯独在这个中断里面就变成了未定义。找了一上午了,还是不知道原因。头晕啊。
谢谢你,没有你的帮助,中断向量表都写不好。我感觉快写好了,可能解决这个错误就写好了。
没报错了,但是,还是没用,不能进入中断, 我说一下,中断的工作过程,你看看对不对。我的是485串口接收中断。
首先有数据接收了,然后呢,UART0_IER的接收中断允许 肯定是要置1的; 然后,这个信号应该被CPU认为是外部中断事件84,这个外部中断84与CPU的中断优先级别,外部中断源14,连在一起了。然后中断信号就进来了,然后就是IER里面要把外部中断源14置1,然后,再到CSR,CSR要开global interrput.然后就应该中断响应,进入中断程序了吧? 中断向量表的地址我也是设置了的,我还漏了什么吗?