MSP430 IIC 程序驱动代码
- 格式:doc
- 大小:47.00 KB
- 文档页数:6
MSP430学习(五)——IAR下JTAG下载和调试BSL要使用专门的烧录软件,除了MSPFET之外,好象还有LSD-BSL,还有能够在网络上找得到的一些自己编写的烧录软件。
TI提供了自己编写烧录软件的API和资料。
但这肯定不是业余爱好者愿意接触的。
IAR是MSP430超强的工具,它本身就能通过JTAG进行烧录和调试,而不需要再使用别的外在的工具。
似乎有介绍也可以两线SBW 烧录。
太复杂了,还是学会最通用的内容再拓展吧。
IAR下使用JTAG,一个是要设定好JTAG硬件,另一个是各种调试窗口和信息的理解。
这儿只说IAR里面怎么粗略使用JTAG。
1、先创建一个工程,写点代码。
Create newproject/Project templates:C,main;接下来保存,增减文件等。
2、开始设置。
Project/options...2.1、芯片型号设置。
General Options/Device,MSP430F5529;2.2、仿真器设置。
Debugger/Driver/FET Debugger;Run to/main;2.3、设置TI仿真器硬件。
FETDebugger/Setup/Connection/Texas Instrument USB-IF,Automatic;Target VCC/Overridedefault,3.3;FETDebugger/Download/Flash erase/Erase main memory。
万万不可选Erase main and Information memory,说是会破坏内部DCO,然后MSP430就完蛋了。
2.4、生成用于BSL烧录的txt或a43等文件类型。
Linker/Output/Outputfile/Override default;用于调试。
Format/Debug information forC-SPY/With.../With...用于烧录的txt。
步进电机2相驱动控制方向与速度程序代码以下是一个示例的步进电机2相驱动控制方向与速度的程序代码:```pythonimport RPi.GPIO as GPIOimport time# 定义步进电机引脚IN1 = 11 # 输入1IN2 = 12 # 输入2IN3 = 13 # 输入3IN4 = 15 # 输入4# 设置GPIO模式为BOARDGPIO.setmode(GPIO.BOARD)# 设置步进电机引脚为输出GPIO.setup(IN1, GPIO.OUT)GPIO.setup(IN2, GPIO.OUT)GPIO.setup(IN3, GPIO.OUT)GPIO.setup(IN4, GPIO.OUT)# 定义步进电机旋转函数def rotate(delay, steps, clockwise=True):# 声明步进电机转动模式coil_A = [1, 0, 0, 1]coil_B = [0, 1, 1, 0]steps_per_rev = 4if not clockwise:steps = -stepsfor _ in range(steps):for i in range(4):# 设置步进电机输出状态GPIO.output(IN1, coil_A[i])GPIO.output(IN2, coil_B[i])GPIO.output(IN3, coil_A[steps_per_rev - i - 1])GPIO.output(IN4, coil_B[steps_per_rev - i - 1])# 延迟一定时间time.sleep(delay)# 控制步进电机旋转try:while True:rotate(0.01, 200, True) # 按顺时针方向旋转200步 time.sleep(1) # 停顿1秒rotate(0.01, 200, False) # 按逆时针方向旋转200步 time.sleep(1) # 停顿1秒except KeyboardInterrupt:GPIO.cleanup()```。
本文为翻译的MSP430x1xx Family User's Guide家庭用户指南,且只有寄存器的翻译比较准确,其他地方阅读时请自行判断语句的准确性本文为翻译的MSP430x1xx Family User's Guide家庭用户指南,且只有寄存器的翻译比较准确,其他地方阅读时请自行判断语句的准确性本文为翻译的MSP430x1xx Family User's Guide家庭用户指南,且只有寄存器的翻译比较准确,其他地方阅读时请自行判断语句的准确性USART外围接口,I2C模式通用同步/异步接收/传输(USART)外设接口支持USART0 I2C通信。
本章介绍I2C模式。
在I2C模式在MSP430x15x和MSP430x16x器件上实现。
专题页面15.1 I2C模块简介..............................................15-215.2 I2C模块操作..............................................15-415.3 I2C模块寄存器............................................15-2015.3 I2C模块寄存器I2C模块寄存器如表15-4。
表15-4.I2C寄存器注册简称注册类型地址初始状态I2C中断使能 I2CIE 读/写 050hI2C中断标志 I2CIFG 读/写 051hI2C数据计数 I2CNDAT 读/写 052hUSART控制 U0CTL 读/写 070hI2C传输控制 I2CTCTL 读/写 071hI2C数据控制 I2CDCTL 只读 072hI2C预分频器 I2CPSC 读/写 073hI2C SCL高 I2CSCLH 读/写 074hI2C SCL低 I2CSCLL 读/写 075hI2C数据 I2CDRW/ I2CDRB 读/写 076hI2C自己的地址 I2COA 读/写 0118hI2C从地址 I2CSA 读/写 011AhI2C中断向量 I2CIV 只读 011ChU0CTL,UART0控制寄存器,I2C模式rw−0rw−0rw−0rw−0rw−0rw−0rw−0rw−1RXDMAEN 第7位接收DMA能。
void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节{uchar i,temp,temp1;temp1=wdata;for(i=0;i<8;i++){scl = 0;iic_delay();temp=temp1;temp=temp&0x80;if(temp==0x80)sda=1;elsesda=0;iic_delay();scl=1;iic_delay();scl=0;iic_delay();temp1=temp1<<1;}}char iic_read_byte(void) //函数功能:从I2C从机中读出一个字节{uchar x;char data_data;for(x=0;x<8;x++){data_data=data_data<<1;sda=1;iic_delay();scl=0;iic_delay();scl=1;iic_delay();if(sda==1)data_data|=0x01;}return data_data;}void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据{uchar t;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);iic_write_byte(wdata);}char iic_read(uchar byte_add) //函数功能:按地址读出一字节数据{uchar t;char x;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);t=((IIC_READ<<1)|0x01);iic_write_byte(t);x=iic_read_byte();return x;}#define IIC_READ 0x1D //定义读指令#define IIC_WRITE 0x1D //定义写指令void iic_write_byte(uchar wdata)//函数功能:向I2C从机写入一个字节{uchar i,temp,temp1;temp1=wdata;for(i=0;i<8;i++){scl = 0;iic_delay();temp=temp1;temp=temp&0x80;if(temp==0x80)sda=1;elsesda=0;iic_delay();scl=1;iic_delay();scl=0;iic_delay();temp1=temp1<<1;}}char iic_read_byte(void) //函数功能:从I2C从机中读出一个字节{uchar x;char data_data;for(x=0;x<8;x++){data_data=data_data<<1;sda=1;iic_delay();scl=0;iic_delay();scl=1;iic_delay();if(sda==1)data_data|=0x01;}return data_data;}void iic_write(uchar byte_add,uchar wdata)//函数功能:按地址写入一字节数据{uchar t;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);iic_write_byte(wdata);}char iic_read(uchar byte_add) //函数功能:按地址读出一字节数据{uchar t;char x;t=(IIC_WRITE<<1);iic_write_byte(t);iic_write_byte(byte_add);t=((IIC_READ<<1)|0x01);iic_write_byte(t);x=iic_read_byte();return x;}。
MSP4301.时钟控制:430三个时钟源:LFXT1CLK低频时钟源,XT2CLK,高频时钟源,DCOCLK数控RC 振荡器。
2.三种时钟源可提供三种时钟信号:1.ACLK辅助时钟:ACLK是LFXT1CLK信号经过1、2、4、8分频得到的。
ACLK可由软件选作外围器件的时钟信号。
2.MCLK系统主时钟:可由软件来设置来源于低频时钟源,高频,数控。
之后可再经过1、2、4、8分频得到。
MCLK主要用于CPU和系统。
3.SMCLK:可有软件选这高频时钟来源,用于高速外围设备。
其中P1.4/SMCLK, P2.0/ACLK, P5.5/SMCLK, P5.6/ACLK。
时钟信号输出,可由PnSEL|=0xXX,l来设置特殊功能端口。
4.三个振荡器的控制位:1.低频LFXT1:OscOff;2.高频XT2CLK:XT2OFF;3.DCO:SCG0;5.一、时钟模块主要由三个寄存器来进行控制。
1.DCOCTL DCO控制器高三位:DCO.2、DCO.1 DCO.0定义8种频率之一,相邻两位相差10%,第五位详细调整频率。
其中DCO为7时表示选择最高频率。
2.BCSCTL1基本时钟控制器1位数7(最高)---XT2OFF:控制XT2的开启与关闭,0:开启;1:关闭。
6---------XTS:控制LFXT1工作模式:0:低频工作模式32768HZ;1:高频工作模式(前提接了相应的高频晶振)。
5,4--------DIV.1、DIV.0:控制ACLK分频(ACLK时钟来源于LFXT1)0:不分;1: 2分;2: 4分;3:8分;3-------XT5V:此位设置为0;2,1,0-----Rsel.0~Rsel.2 :0~7:最低标频~最高标频。
3.BCSCTL27,6-------SELM.1,SELM.0:选择MCLK时钟源(系统主时钟)0,1:DCOCLK为时钟源2:XT2CLK为时钟源3:时钟源为LFXT1CLK5,4-------DIVM.0,DIVM.1 选择MCLK分频。
/开发平台;MSP430IIC总线驱动代码本人试用过,可以成功的调通/////////////////////////////////////////////////////////////iic.c#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;#define SCL_H P1OUT |= BIT2#define SCL_L P1OUT &= ~BIT2#define SDA_H P1OUT |= BIT3#define SDA_L P1OUT &= ~BIT3#define SDA_in P1DIR &= ~BIT3 //SDA改成输入模式#define SDA_out P1DIR |= BIT3 //SDA变回输出模式#define SDA_val P1IN&BIT3 //SDA的位值#define TRUE 1#define FALSE 0/*******************************************函数名称:delay功能:延时约15us的时间参数:无返回值:无********************************************/void delay(void){uchar i;for(i = 0;i < 15;i++)_NOP();}/*******************************************函数名称:start功能:完成IIC的起始条件操作参数:无返回值:无********************************************/void start(void){SCL_H;SDA_H;delay();SDA_L;delay();SCL_L;delay();}/******************************************* 函数名称:stop功能:完成IIC的终止条件操作参数:无返回值:无********************************************/ void stop(void){SDA_L;delay();SCL_H;delay();SDA_H;delay();}/******************************************* 函数名称:mack功能:完成IIC的主机应答操作参数:无返回值:无********************************************/ void mack(void){SDA_L;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP();_NOP();SDA_H;delay();}/******************************************* 函数名称:mnack功能:完成IIC的主机无应答操作参数:无返回值:无********************************************/ void mnack(void){SDA_H;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP(); _NOP();SDA_L;delay();}/**********检查应答信号函数******************/ /*如果返回值为1则证明有应答信号,反之没有*/ /******************************************* 函数名称:check功能:检查从机的应答操作参数:无返回值:从机是否有应答:1--有,0--无********************************************/ uchar check(void){uchar slaveack;SDA_H;_NOP(); _NOP();SCL_H;_NOP(); _NOP();SDA_in;_NOP(); _NOP();slaveack = SDA_val; //读入SDA数值SCL_L;delay();SDA_out;if(slaveack) return FALSE;else return TRUE;}/******************************************* 函数名称:write1功能:向IIC总线发送一个1参数:无返回值:无********************************************/void write1(void){SDA_H;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write0功能:向IIC总线发送一个0参数:无返回值:无********************************************/ void write0(void){SDA_L;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write1byte功能:向IIC总线发送一个字节的数据参数:wdata--发送的数据返回值:无********************************************/ void write1byte(uchar wdata){uchar i;for(i = 8;i > 0;i--){if(wdata & 0x80) write1();else write0();wdata <<= 1;}SDA_H;_NOP();}/******************************************* 函数名称:writeNbyte功能:向IIC总线发送N个字节的数据参数:outbuffer--指向发送数据存放首地址的指针n--数据的个数返回值:发送是否成功的标志:1--成功,0--失败********************************************/ uchar writeNbyte(uchar * outbuffer,uchar n){uchar i;for(i = 0;i < n;i++){write1byte(* outbuffer);if(check()){outbuffer++;}else{stop();return FALSE;}}stop();return TRUE;}/******************************************* 函数名称:read1byte功能:从IIC总线读取一个字节参数:无返回值:读取的数据********************************************/ uchar read1byte(void){uchar rdata = 0x00,i;uchar flag;for(i = 0;i < 8;i++){SDA_H;delay();SCL_H;SDA_in;delay();flag = SDA_val;rdata <<= 1;if(flag) rdata |= 0x01;SDA_out;SCL_L;delay();}return rdata;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //iic.h#ifndef __IIC_h__#define __IIC_h__extern void delay(void);extern void start(void);extern void stop(void);extern void mack(void);extern void mnack(void);extern unsigned char check(void);extern void write1(void);extern void write0(void);extern void write1byte(unsigned char wdata);extern unsigned char writeNbyte(unsigned char * outbuffer,unsigned char n); extern unsigned char read1byte(void);extern void readNbyte(unsigned char * inbuffer,unsigned char n);#endif。
/开发平台;MSP430IIC总线驱动代码本人试用过,可以成功的调通/////////////////////////////////////////////////////////////iic.c#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;#define SCL_H P1OUT |= BIT2#define SCL_L P1OUT &= ~BIT2#define SDA_H P1OUT |= BIT3#define SDA_L P1OUT &= ~BIT3#define SDA_in P1DIR &= ~BIT3 //SDA改成输入模式#define SDA_out P1DIR |= BIT3 //SDA变回输出模式#define SDA_val P1IN&BIT3 //SDA的位值#define TRUE 1#define FALSE 0/*******************************************函数名称:delay功能:延时约15us的时间参数:无返回值:无********************************************/void delay(void){uchar i;for(i = 0;i < 15;i++)_NOP();}/*******************************************函数名称:start功能:完成IIC的起始条件操作参数:无返回值:无********************************************/void start(void){SCL_H;SDA_H;delay();SDA_L;delay();SCL_L;delay();}/******************************************* 函数名称:stop功能:完成IIC的终止条件操作参数:无返回值:无********************************************/ void stop(void){SDA_L;delay();SCL_H;delay();SDA_H;delay();}/******************************************* 函数名称:mack功能:完成IIC的主机应答操作参数:无返回值:无********************************************/ void mack(void){SDA_L;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP();_NOP();SDA_H;delay();}/******************************************* 函数名称:mnack功能:完成IIC的主机无应答操作参数:无返回值:无********************************************/ void mnack(void){SDA_H;_NOP(); _NOP();SCL_H;delay();SCL_L;_NOP(); _NOP();SDA_L;delay();}/**********检查应答信号函数******************/ /*如果返回值为1则证明有应答信号,反之没有*/ /******************************************* 函数名称:check功能:检查从机的应答操作参数:无返回值:从机是否有应答:1--有,0--无********************************************/ uchar check(void){uchar slaveack;SDA_H;_NOP(); _NOP();SCL_H;_NOP(); _NOP();SDA_in;_NOP(); _NOP();slaveack = SDA_val; //读入SDA数值SCL_L;delay();SDA_out;if(slaveack) return FALSE;else return TRUE;}/******************************************* 函数名称:write1功能:向IIC总线发送一个1参数:无返回值:无********************************************/void write1(void){SDA_H;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write0功能:向IIC总线发送一个0参数:无返回值:无********************************************/ void write0(void){SDA_L;delay();SCL_H;delay();SCL_L;delay();}/******************************************* 函数名称:write1byte功能:向IIC总线发送一个字节的数据参数:wdata--发送的数据返回值:无********************************************/ void write1byte(uchar wdata){uchar i;for(i = 8;i > 0;i--){if(wdata & 0x80) write1();else write0();wdata <<= 1;}SDA_H;_NOP();}/******************************************* 函数名称:writeNbyte功能:向IIC总线发送N个字节的数据参数:outbuffer--指向发送数据存放首地址的指针n--数据的个数返回值:发送是否成功的标志:1--成功,0--失败********************************************/ uchar writeNbyte(uchar * outbuffer,uchar n){uchar i;for(i = 0;i < n;i++){write1byte(* outbuffer);if(check()){outbuffer++;}else{stop();return FALSE;}}stop();return TRUE;}/******************************************* 函数名称:read1byte功能:从IIC总线读取一个字节参数:无返回值:读取的数据********************************************/ uchar read1byte(void){uchar rdata = 0x00,i;uchar flag;for(i = 0;i < 8;i++){SDA_H;delay();SCL_H;SDA_in;delay();flag = SDA_val;rdata <<= 1;if(flag) rdata |= 0x01;SDA_out;SCL_L;delay();}return rdata;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //iic.h#ifndef __IIC_h__#define __IIC_h__extern void delay(void);extern void start(void);extern void stop(void);extern void mack(void);extern void mnack(void);extern unsigned char check(void);extern void write1(void);extern void write0(void);extern void write1byte(unsigned char wdata);extern unsigned char writeNbyte(unsigned char * outbuffer,unsigned char n); extern unsigned char read1byte(void);extern void readNbyte(unsigned char * inbuffer,unsigned char n);#endif。