您好,
我使用的是一下链接内的GPIO例子
http://www.deyisupport.com/question_answer/dsp_arm/c6000_multicore/f/53/t/47664.aspx
发现里面的一些gpio的操作 set, clear都是对整个寄存器进行操作,不知道是否支持对某一个Bit的操作。
如果没有的话,是不是需要自己继续编写结构体来实现。
ahong007:
测试程序已经是bit操作,你没有仔细看吧
dongdong yu:
回复 ahong007:
你好! 感谢回复~
不过我不知道你指的测试程序是不是那个首页的keystone1 的K1_STK_v1.1.zip ?
举个例子
代码如下:
gpGPIO_regs->BANK_REGISTERS[0].CLR_DATA =0xffff4000;// DSP_ACK = 0CSL_GpioRegs * gpGPIO_regs= (CSL_GpioRegs * )CSL_GPIO_REGS;typedef struct{volatile Uint32 DIR;volatile Uint32 OUT_DATA;volatile Uint32 SET_DATA;volatile Uint32 CLR_DATA;volatile Uint32 IN_DATA;volatile Uint32 SET_RIS_TRIG;volatile Uint32 CLR_RIS_TRIG;volatile Uint32 SET_FAL_TRIG;volatile Uint32 CLR_FAL_TRIG;volatile Uint32 INTSTAT; } CSL_GpioBank_registersRegs;/**************************************************************************\ * Register Overlay Structure \**************************************************************************/ typedef struct{volatile Uint32 PID;volatile Uint32 PCR;volatile Uint32 BINTEN;volatile Uint8 RSVD0[4];CSL_GpioBank_registersRegs BANK_REGISTERS[4]; } CSL_GpioRegs;这个就是clear GPIO寄存器的函数,但是在CLR_DATA之后就没有元素了,所以只能进行整个寄存器的操作。
比如我想单单某一个bit清除,或者单单某一个bit置位,没有bit操作了(我知道也可以用整个寄存器赋值实现)。
全部追踪的代码如上,
您能告诉我,如何进行bit操作么? 你有没有仔细看呢….
ahong007:
回复 dongdong yu:
gpGPIO_regs->BANK_REGISTERS[0].SET_DATA= (1<<i);
gpGPIO_regs->BANK_REGISTERS[0].CLR_DATA= (1<<i);
这是不是按位操作,你这是仔细看了吗?谦虚点…
dongdong yu:
回复 ahong007:
。。。。。
哥们,首先可能你我理解的对bit的操作不一样,而且我在前面也说过了,我知道怎么对整个寄存器操作达到操作某一位的效果,正如你的移位操作。
那我再说明白点好了,我指的是操作对象就是某一位 比如 gpGPIO_regs->BANK_REGISTERS[0].bit.GIOPx = 1; 这种操作。
我很感谢你的回复是真的,但是是谁一上来就说 你仔细看了么? 我咋觉的你一直没有仔细看我的问题…谦虚也是对谦虚的人才谦虚的…