背景和实验目的:想用f2274和bq24725a 利用SMbus通信,写了段代码想让bq24725a EVM进行12v,256mA;8v,512mA两个状态循环充电,两个状态之间间隔4s以便进行测量看是否按这两个数值进行充电。项目文件已经压缩进附件,顺便说一下,因为只是单纯的进行个通信的小测试,所以没有加timeout模块代码。
软件平台:CCS v6.1.1
现有如下问题:
1.貌似再发送第一个UCTXSTT后,UCNACKIFG就置了1,然后就跳进了NACK中断程序里,因为在中断里最后写了一行UCTXSTT所以在跑出中断的时候NACKIFG又置了1,所以就一直在NACK中断里死循环了;(这是我全速resume然后点好几次中断后,发现光标一直停留在NACK里得出的结论)
2.我在UCB0TXIFG中断程序里延时4s没有什么大问题吧?
3.从机地址在写入UCB0I2CSA后,是自动跟着UCTXSTT一起发出去的?
4.我试着把NACK的ISR给注释掉,但是在全速运行中按暂停后,光标会停在一下代码中,这段代码是什么意思?
是不是意思我使能了NACKIFG,但是没有响应的中断去响应系统自动跳进了个这个代码?
;******************************************************************************
;* ISR_TRAP.ASM – v4.4.5
;—————————————————————————–
;– default ISR handler if user does not supply
;– simply puts device into lpm0
;—————————————————————————–
.sect ".text:_isr:__TI_ISR_TRAP"
.align 2
.global __TI_ISR_TRAP
__TI_ISR_TRAP:
BIS.W #(0x0010),SR
JMP __TI_ISR_TRAP
;******************************************************************************
;* BUILD ATTRIBUTES *
;* HW_MPY_INLINE_INFO=1: file does not have any inlined hw mpy *
;* HW_MPY_ISR_INFO =1: file does not have ISR's with mpy or func calls *
;******************************************************************************
.battr "TI", Tag_File, 1, Tag_HW_MPY_INLINE_INFO(1)
.battr "TI", Tag_File, 1, Tag_HW_MPY_ISR_INFO(1)
5.我快被这个问题搞疯了,有没有SMbus现成的封装好的代码?是msp430_smbuslib_1_10_00_00这个吗?
拓展问题如下两个:
1.在我的main函数中发送了uctxstt前,UCB0TXIFG已经置了1,那么在执行了uctxstt那行后,是直接回进入TXIFG中断还是会在进入LPM0后再进入。或者说对于一个单片机程序,是最起码执行一般main函数后会进入TXIFG的ISR还是随时会进入ISR。
2.假设我在TXIFG的ISR里把TXIFG 清零了,什么也不干,那是不是跑出ISR后,永远也不会进入ISR了,除非再写数据给TXBUF,发送后,TXIFG就会置1
3.msp430,在进入TXIFG的ISR后,在执行代码完的时候,如果TXIFG此时又置1了,那不是跑出ISR后又立马进中断程序了吗,还是说会经过一定的时钟周期后再进中断服务程序。
我是新手,已经尽量将问题描述清楚了,希望TI的工程师们不吝赐教!多谢!
user4365100:
回复 灰小子:
那你知道程序跳进 ISR_TRAP.ASM这个代码是为什么呢,这程序是什么意思?
Deal LEE:
回复 user4365100:
我用FR4133运行UART的例程也遇到同样的问题了,请问楼主ISR_TRAP弄明白了吗
Jacky Xu:
回复 user4365100:
这通常是我们默认使用的中断子程序入口,如果你没有指定你自己的中断子程序,而又开了中断,那当有相应中断产生时,就会跳到这里。
你是不是误开了什么中断,或者开了中断但是没有指定相应的你自己的中断子程序。
user4365100:
回复 Jacky Xu:
谢谢回复,根据你的回答已经搞明白了,因为我把NACK的中断开启,但是却把NACK的中断程序注释掉了,所以才进了ISR_TRAP
user4365100:
回复 Deal LEE:
请看楼下Jacky Xu的回答。另外我之后用了TI的SMbus的例程非常强大,只要更改少许寄存器配置就可以用!推荐用
user4365100:
回复 Deal LEE:
请看楼下Jacky Xu的回答。另外我之后用了TI的SMbus的例程非常强大,只要更改少许寄存器配置就可以用!推荐用
Wzr_Nx:
回复 user4365100:
你好,我现在有几个问题想请教一下你,忘不吝赐教。
1.使用msp430_smbuslib_1_10_00_00适用其他型号的MSP430(我现在用的是MSP430G2452和MSP430FR2033)?
2.我使用Smbus是用来读BQ系列的电池管理IC,我现在只需要block read其中的某个位的数据,请问需要在例程里面更改哪些寄存器配置?
3.能否提供一下你的代码供我参考一下?
以上,本人刚接触这块不久希望不吝赐教,谢谢!
user4365100:
回复 Wzr_Nx:
1.可以适用,只不过有些寄存器需要稍作修改2.这个很简单,只要你项目文件配置成对应你所用的芯片型号,再编译一下就知道哪些寄存器需要改了。3.代码无参考价值,因为我所用的型号不同。