背景和实验目的:想用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的工程师们不吝赐教!多谢!