技术专栏
MK10DN512VMC10主控陀螺仪调试记录
1.前言
2.初始代码部分
3.检查IIC通讯
4. 更新code
1.前言
项目使用的芯片为MK10DN512VMC10。
正在尝试初始化 I2C 模块,以便和我的FXOS8700CQ 6轴传感器进行通讯
该传感器为4位加速度传感器和16位磁力计与高性能ASIC结合在一起
典型的方向分辨率为0.1°,罗盘方位精度误差小于5°
目前完成了IIC初始化,但一直无法和陀螺仪进行正常的通讯
用示波器进行监视,没能在示波器上看到 SCL 方波
当尝试写入 I2C 寄存器时,系统遇到hard fault
FXOS8700CQ的描述如下:
2.初始代码部分
#define I2C_Frequency_Divider_register__I2C1_F (*(uint32_t *)0x40067001U)
#define I2C_Control_Register_1__I2C1_C1 (*(uint32_t *)0x40067002U)
#define I2C_Status_Register__I2C1_S (*(uint32_t *)0x40067003U)
#define Pin_Control_Register_n__PORTE_PCR0 (*(uint32_t *)0x4004D000U)
#define Pin_Control_Register_n__PORTE_PCR1 (*(uint32_t *)0x4004D004U)
#define System_Clock_Gating_Control_Register_4_SIM_SCGC4 (*(uint32_t *)0x40048034U)
#define System_Clock_Gating_Control_Register_5_SIM_SCGC5 (*(uint32_t *)0x40048038U)
void mcu_Initialise()
{
Pin_Control_Register_n__PORTE_PCR0 = 0x00000620U;
Pin_Control_Register_n__PORTE_PCR1 = 0x00000620U;
System_Clock_Gating_Control_Register_4_SIM_SCGC4 |= 0x00000080U;
System_Clock_Gating_Control_Register_5_SIM_SCGC5 |= 0x00002000U;
}
void intitialiseI2C()
{
I2C_Frequency_Divider_register__I2C0_F |= 0x29U; //writing to this register takes the system into hard fault
I2C_Control_Register_1__I2C1_C1 |= 0x80;
}
int main(void) {
BOARD_InitBootPins();
BOARD_InitBootClocks();
mcu_Initialise();
intitialiseI2C();
}
3.检查IIC通讯
手册上面的地址如上图:
命令发送顺序如下:
4. 更新code
按照上面的顺序,对程序进行了修改,
但是未能从 I2C 模块FXOS8700 中获取 我需要的值,
I2C 模块的电源电压为 5V。
在对 mcu 进行编程之前,SCL 和 SDA 线均以接地为基准测量 5 伏。
然后当在调试时,将示波器连接到 I2C 总线,电压从 5V 下降到 3.75V,
并在代码中复用 PortD 时保持在那里。
即使 mcu 和模块之间没有数据传输,
不应该在 scl 线上看到方波吗?
在状态寄存器没有更新参数。
下面为更新后的code:
Printing "ReceivedByte" array on tera term shows wrong WhoAmI value
uint8_t Receivedbyte[3];
uint8_t WhoAmI_address[1] = {0x0D};
size_t RegSize = 1;
void Mcu_Initialise()
{
PORTD->PCR[8] = 0x01000000; //clear the ISF flag
PORTD->PCR[9] = 0x01000000; //clear the ISF flag
PORTD->PCR[8] |= 0x00000200; //mux PTD8 for I2C0_SCL
PORTD->PCR[9] |= 0x00000200; //mux PTD9 for I2C0_SDA
SIM->SCGC4 |= SIM_SCGC4_I2C0_MASK; // I2C0 clock
SIM->SCGC5 |= 0x00002000U; //portD
//I'm not sure about the following two lines
EnableIRQ(I2C0_IRQn);
NVIC_SetPriority(I2C0_IRQn,0);
}
void I2C_Initialise()
{
I2C0->A1 = 0;
I2C0->F = 0;
I2C0->C1 = 0;
I2C0->S = 0xFFU;
I2C0->C2 = 0;
I2C0->S |= I2C_S_IICIF_MASK ; //clear IICIF
I2C0->F = 0x27U; //bus clock is 48MHz, calculated baud rate for 100khz
I2C0->C1 = I2C_C1_IICEN_MASK;
//I2C0->C1 |= I2C_C1_IICIE_MASK; // When I enable this interrupt the system gets stuck in CLOCK_GetOutClkFreq() function. When I disable it I'm able to run my code from mcu_initialise() to Read()
void StartCondition()
{
I2C_MasterStart(I2C0, FXOS8700CQ_Address, kI2C_Write);
}
void StartRepeat()
{
I2C_MasterRepeatedStart(I2C0, FXOS8700CQ_Address, kI2C_Read);
}
void sendRegister()
{
I2C_MasterWriteBlocking(I2C0, WhoAmI_address, RegSize, kI2C_TransferNoStopFlag);
}
void Read()
{
I2C_MasterReadBlocking(I2C0,ReceivedByte, RegSize, kI2C_TransferNoStartFlag);
}
int main()
{
BOARD_InitPins();
__disable_irq();
InitVersion();
/* Init board hardware. */
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
mcu_Initialise();
intitialiseI2C();
StartCondition();
sendRegister();
StartRepeat();
Read();
}
声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包
93
收藏
评论
打赏
- 分享
- 举报
评论
0个
手气红包
暂无数据
相关专栏
-
浏览量:726次2023-09-26 11:02:21
-
浏览量:4070次2021-07-30 15:02:12
-
浏览量:2023次2019-12-17 11:11:06
-
浏览量:1939次2020-04-07 10:24:37
-
浏览量:1723次2020-01-04 10:19:25
-
浏览量:14118次2019-09-21 19:14:57
-
浏览量:5510次2020-02-06 11:21:54
-
浏览量:1743次2020-05-12 16:46:51
-
浏览量:2397次2022-02-21 09:00:12
-
浏览量:1771次2019-11-07 09:01:17
-
浏览量:1398次2023-07-11 12:40:32
-
浏览量:2082次2020-03-20 10:39:49
-
浏览量:524次2023-12-21 10:45:56
-
浏览量:1802次2019-11-22 09:03:33
-
浏览量:5363次2021-04-06 14:54:49
-
浏览量:1683次2020-11-12 10:53:19
-
浏览量:1842次2022-02-12 09:00:19
-
浏览量:2227次2020-06-28 13:50:03
-
浏览量:2358次2020-08-30 11:33:11
置顶时间设置
结束时间
删除原因
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
打赏作者
free-jdx
您的支持将鼓励我继续创作!
打赏金额:
¥1
¥5
¥10
¥50
¥100
支付方式:
微信支付
打赏成功!
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
审核成功
发布时间设置
发布时间:
请选择发布时间设置
是否关联周任务-专栏模块
审核失败
失败原因
请选择失败原因
备注
请输入备注