标题: 32单片机位带操作程序 [打印本页]

作者: sr861126    时间: 2024-12-2 13:46
标题: 32单片机位带操作程序
#ifndef __SYS_H
#define __SYS_H         
#include "hk32f030m.h"
#define u16 unsigned int                                                                                                                                    


#ifdef __cplusplus
extern "C" {
        #endif
        typedef struct
        {
                u16 bit0 : 1;
                u16 bit1 : 1;
                u16 bit2 : 1;
                u16 bit3 : 1;
                u16 bit4 : 1;
                u16 bit5 : 1;
                u16 bit6 : 1;
                u16 bit7 : 1;
                u16 bit8 : 1;
                u16 bit9 : 1;
                u16 bit10 : 1;
                u16 bit11 : 1;
                u16 bit12 : 1;
                u16 bit13 : 1;
                u16 bit14 : 1;
                u16 bit15 : 1;
        }Bits16_TypeDef;

        //IO口操作,只对单一的IO口!
        //确保n的值小于16!
        #define PAout(n)   ( ((Bits16_TypeDef *)(&(GPIOA->ODR)))->bit##n )
        #define PAin(n)    ( ( GPIOA->IDR&(1 << (n)) )>>n )  //输入

        #define PBout(n)   ( ((Bits16_TypeDef *)(&(GPIOB->ODR)))->bit##n )
        #define PBin(n)    ( ( GPIOB->IDR&(1 << (n)) )>>n )  //输入

        #define PCout(n)   ( ((Bits16_TypeDef *)(&(GPIOC->ODR)))->bit##n )
        #define PCin(n)    ( ( GPIOC->IDR&(1 << (n)) )>>n )  //输入

        #define PDout(n)   ( ((Bits16_TypeDef *)(&(GPIOD->ODR)))->bit##n )
        #define PDin(n)    ( ( GPIOD->IDR&(1 << (n)) )>>n )  //输入

        #ifdef __cplusplus
}
#endif


#endif


作者: zhxzhx    时间: 2024-12-31 17:17
你这是 位带?这不是域吗?
作者: joyb    时间: 2025-4-10 08:35
位带操作简单的说,就是把每个比特膨胀为一个 32 位的字,当访问这些字的时候就达到了访问比特的目的,比如说 GPIO 的 ODR 寄存器有 32 个位,那么可以映射到 32 个地址上,我们去访问这 32 个地址就达到访问 32 个比特的目的。这样我们往某个地址写 1 就达到往对应比特位写 1 的目的,同样往某个地址写 0 就达到往对应的比特位写 0 的目的。

支持了位带操作后,可以使用普通的加载、存储指令来对单一的比特进行读写。在CM3中,有两个区中实现了位带。其中一个是 SRAM 区的最低 1MB 范围,第二个则是片内外设区的最低 1MB 范围。这两个区中的地址除了可以像普通的 RAM 一样使用外,它们还都有自
己的“位带别名区”,位带别名区把每个比特膨胀成一个 32 位的字。当你通过位带别名区访问这些字时,就可以达到访问原始比特的目的。
作者: rundstedt    时间: 2025-7-18 19:14
为了节约1bit的空间,要用32bit位带地址访问,是不是丢了西瓜捡芝麻?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1