Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I2C环回模式_C_Arm - Fatal编程技术网

I2C环回模式

I2C环回模式,c,arm,C,Arm,这是LM4F120H5QR I2C环回模式的程序,我使用PB2和PB3作为scl和sda。我无法从数据寄存器读取数据,MTPR(SCL时钟周期)也从7变为1 #include<stdio.h> #include<stdint.h> #include<lm4f120h5qr.h> void transmit() { while(I2C0_MASTER_MCS_R & 0x1); // WAIT TILL BUSY BIT IS FREE

这是LM4F120H5QR I2C环回模式的程序,我使用PB2和PB3作为scl和sda。我无法从数据寄存器读取数据,MTPR(SCL时钟周期)也从7变为1

#include<stdio.h>
#include<stdint.h>
#include<lm4f120h5qr.h>
void transmit()
{
    while(I2C0_MASTER_MCS_R & 0x1); // WAIT TILL BUSY BIT IS FREE
    I2C0_MASTER_MSA_R=0x0;         // RS BIT-0 FOR TRANSMIT
    I2C0_MASTER_MDR_R=0x0A;        // WRITING DATA
    I2C0_MASTER_MCS_R =0x03;       //START + RUN BIT ENABLE
    while(I2C0_MASTER_MCS_R & 0x1); //WAIT
    I2C0_MASTER_MCS_R = 0x01;       // ENABLE TRANSMIT
    while(I2C0_MASTER_MCS_R & 0x1); // WAIT
    I2C0_MASTER_MCS_R =0x05;        //STOP
    while(I2C0_MASTER_MCS_R & 0x1); //WAIT
}

int main()
{
    char ch=0;
    SYSCTL_RCC_R = 0x01521540;  // CLOCK                        
    SYSCTL_RCC2_R = 0xC1004000;
    SYSCTL_RCGCI2C_R |= 0x01;    // CLOCK FOR I2C
    SYSCTL_RCGCGPIO_R |=0x02;   //CLOCK FOR GPIO                    
    GPIO_PORTB_DIR_R &= ~0x0C;  // DIRECTION                        
    GPIO_PORTB_AFSEL_R |= 0x0C; //ALTERNATE FUNCTION                        
    GPIO_PORTB_PCTL_R |= 0x3300;    // PORT CONTROL                 
    GPIO_PORTB_DR2R_R |= 0x0C;  // 2 mA                     
    GPIO_PORTB_PUR_R |= 0x0C;    // pull up resistors
    GPIO_PORTB_ODR_R |= 0x08;   // open drain for sda                   
    GPIO_PORTB_DEN_R |= 0x0C;   // digital enable                       
    I2C0_MASTER_MCR_R |= 0x01;  // loopback mode enable                             
    I2C0_MASTER_MTPR_R |= 0x07; // scl clock period 100 kbps                            
    transmit();
    while(I2C0_MASTER_MCS_R & 0x1); // wait             
    I2C0_MASTER_MSA_R =0x0;         // RS bit is 0 to txt clock             
    I2C0_MASTER_MCS_R = 0x03;        // start+run
    while(I2C0_MASTER_MCS_R & 0x1);  //wait
    I2C0_MASTER_MCS_R = 0x05;        //stop
    while(I2C0_MASTER_MCS_R & 0x1);  // wait
    I2C0_MASTER_MSA_R |=0x1;         //RS bit 1 to receive
    I2C0_MASTER_MCS_R= 0x0B;         // ack+start+run
    while(I2C0_MASTER_MCS_R & 0x1);  //wait
    ch=I2C0_MASTER_MDR_R;            //reading the data
    while(I2C0_MASTER_MCS_R & 0x1);  // wait
    I2C0_MASTER_MCS_R=0x05;          //stop
    while(I2C0_MASTER_MCS_R & 0x1);  //wait
}
#包括
#包括
#包括
无效传输()
{
while(I2C0_MASTER_MCS_R&0x1);//等待忙位空闲
I2C0_MASTER_MSA_R=0x0;//用于传输的RS位0
I2C0\u MASTER\u MDR\u R=0x0A;//写入数据
I2C0\u MASTER\u MCS\u R=0x03;//启动+运行位启用
while(I2C0_MASTER_MCS_R&0x1);//等待
I2C0\u MASTER\u MCS\u R=0x01;//启用传输
while(I2C0_MASTER_MCS_R&0x1);//等待
I2C0\u MASTER\u MCS\u R=0x05;//停止
while(I2C0_MASTER_MCS_R&0x1);//等待
}
int main()
{
char ch=0;
SYSCTL_RCC_R=0x01521540;//时钟
SYSCTL_RCC2_R=0xC1004000;
SYSCTL_RCGCI2C_R |=0x01;//I2C的时钟
SYSCTL_RCGCGPIO|u R |=0x02;//GPIO的时钟
GPIO\u PORTB\u DIR\u R&=~0x0C;//方向
GPIO_PORTB_AFSEL_R |=0x0C;//备用函数
GPIO_端口B_PCTL_R |=0x3300;//端口控制
GPIO_端口B_DR2R|=0x0C;//2 mA
GPIO_PORTB_PUR|=0x0C;//上拉电阻器
GPIO_端口B_ODR|=0x08;//sda的排水明沟
GPIO_端口B_DEN|R |=0x0C;//数字启用
I2C0_MASTER_MCR|=0x01;//环回模式启用
I2C0_MASTER_MTPR|R |=0x07;//scl时钟周期100 kbps
传输();
while(I2C0_MASTER_MCS_R&0x1);//等待
I2C0_MASTER_MSA_R=0x0;//RS位是0到txt时钟
I2C0\u MASTER\u MCS\u R=0x03;//启动+运行
while(I2C0_MASTER_MCS_R&0x1);//等待
I2C0\u MASTER\u MCS\u R=0x05;//停止
while(I2C0_MASTER_MCS_R&0x1);//等待
I2C0_MASTER_MSA|R |=0x1;//要接收的RS位1
I2C0_MASTER_MCS_R=0x0B;//确认+启动+运行
while(I2C0_MASTER_MCS_R&0x1);//等待
ch=I2C0\u MASTER\u MDR\R;//读取数据
while(I2C0_MASTER_MCS_R&0x1);//等待
I2C0\u MASTER\u MCS\u R=0x05;//停止
while(I2C0_MASTER_MCS_R&0x1);//等待
}

注意:您应该使用CMSIS结构指针/成员访问,而不是传统的寄存器名@Someprogrammerdude@harper我是新手,我正在LM4F120H5QR中进行i2c环回测试。我直接使用的是寄存器而不是结构类型。有人可以发布i2c环回模式吗