你好
在从模式下使用 eUSCI 时、是否需要外部晶体用于 i2c 100kHz 或400kHz
提前感谢
斯特凡
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.
你好
在从模式下使用 eUSCI 时、是否需要外部晶体用于 i2c 100kHz 或400kHz
提前感谢
斯特凡
尊敬的
很清楚。
我尝试查找 " MSP430F21x2代码示例(修订版 C): www.ti.com/.../slac163c " 、但链接错误
现在链接是什么?
我在 TI.com 上搜索"slac163"、最终结果是:
https://www.ti.com/tool/download/SLAC163
Resource Explorer 中也提供了以下链接:
https://dev.ti.com/tirex/explore/node?node=A__AA9hfDmh39HASB2FIu6KKQ__msp430ware__IOGqZri__LATEST
我刚刚过去并复制了 IRA 8.00中的一个示例、但我没有收到
数据
发生了什么
#包含
优点:
RSEG CSTACK ;定义堆栈段
优点:
RSEG DATA16_N ; RAM
RxData DS 128 ;分配128字节的 RAM
优点:
RSEG 代码 ;汇编到 Flash 存储器
优点:
重置 mov.w #SFE(CSTACK ), SP ;初始化 stackpointer
//指示
StopWDT mov.w #WDTPW+WDTHOLD、&WDTCTL ;Stop WDT
CheckCal CMP.b #0FFh,&CALBC1_16MHz ;校准常数已擦除?
JeQ 陷阱
CMP.b #0FFh、&CALDCO_16MHz
JNE 负载
陷阱 JMP $ ;陷阱 CPU!!
载入 MOV.b &CALBC1_16MHZ、&BCSCTL1 ;将 DCO 设定为16MHz
MOV.b &CALDCO_16MHz、&DCOCTL
SetupP3 I2C.b #06h,&P3SEL ;将 bis 引脚分配给 USCI_B0
SetupUCB0 bis UCSWRST.b #UCSWRST,&UCB0CTL1 ;启用软件复位
MOV.b #UCMODE_3+UCSYNC、&UCB0CTL0
; I2C 从机,同步模式
MOV.w #010h,&UCB0I2COA ;自有地址为010h
bic.b #UCSWRST,&UCB0CTL1 ;清除软件复位,恢复操作
UCSTPIE+UCSTTIE 和 bis 0I2CIE
;启用 STT 和 STP 中断
// 提示
UCB0RXIE.b #UCB0RXIE&IE2 ;启用 bis 中断
main mov.w #RxData,R5 ;RX 缓冲区的起始
CLR.w R6 ;清除 RX 字节计数
// LPM0.b SR ;输入 bis,使能中断
;保持在 LPM0中直到主器件
;完成 TX
NOP ;设置断点>>HERE<<和
;读出 RxData 缓冲区
JMP 主 ;重复
优点:
; USCI_B0数据 ISR 被用来移动从 I2C 主机接收到的数据
;加载到 MSP430存储器。
优点:
USCIAB0TX_ISR; USCI_B0数据 ISR
优点:
MOV.b &UCB0RXBUF,0(R5) ;将 RX 数据移动到地址 R5
INC.w R5 ;地址指针增量
Inc.w R6 ;递增 RX 字节计数
区域
优点:
; USCI_B0状态 ISR 被用来将 CPU 从 LPM0中唤醒以
;在主程序中处理接收到的数据。 LPM0只有在出现以下情况时退出
;当接收到实际数据时的(重新)启动或停止条件。
优点:
USCIAB0RX_ISR; USCI_B0状态 ISR
优点:
bic.b #UCSTPIFG+UCSTTIFG、&UCB0STAT
;清除中断标志
TST.w R6 ;检查 RX 字节计数器
JZ USCIAB0RX_ISR_1 ;如果没有收到任何信息则跳转
// bic.w #LPM0,0(SP) ;清除 LPM0
USCIAB0RX_ISR_1
区域
优点:
通用 INTEC ;中断向量
优点:
org USCIAB0TX_VECTOR ;USCI_B0 I2C 数据整型矢量
DW USCIAB0TX_ISR
org USCIAB0RX_VECTOR ;USCI_B0 I2C 状态内部矢量
DW USCIAB0RX_ISR
org reset_vector ; POR , ext. 复位、看门狗
DW 复位
结束
您好、 Stephane
我没有找到它的演示代码。
只需 在 I2C 中断中设置某种 I2C_Status_FLAG 变量就可以了。
例如:
void I2C_Start_interrupt_Handler(){ if(I2C_STATUS_RX_STARTED){ I2C_STATUS_RX_REPEATED_STARTED = true; } else{ I2C_STATUS_RX_STARTED = true; } } void I2C_Stop_interrupt_Handler(){ I2C_STATUS_RX_REPEATED_STARTED = false; I2C_STATUS_RX_STARTED = false; I2C_STATUS_RX_STOP = true; }
此致、
赫利克