1 /* (CC-BY-NC-SA) ROBIN KRENS - ROBIN @ ROBINKRENS.NL
4 * 2019/7/20 - ROBIN KRENS
8 * Helper functions to set registers
16 #include <lib/regfunc.h>
17 #include <lib/string.h>
18 #include <lib/stdio.h>
23 // register set bit at position
24 void rsetbit(volatile uint32_t * reg, short pos) {
25 *reg = *reg | (0x1 << pos);
28 // register set bits from certain pos
29 void rsetbitsfrom(volatile uint32_t * reg, short pos, int val) {
30 *reg = *reg | (val << pos);
33 // register clear bit at position
34 void rclrbit(volatile uint32_t * reg, short pos) {
35 *reg = *reg & ~(0x1 << pos);
38 // check if a bit is set
39 int rchkbit(volatile uint32_t * reg, short pos) {
40 if ((*reg >> pos) & 0x1)
45 // register (over)write
46 void rwrite(volatile uint32_t * reg, uint32_t val) {
51 /* DEPRECATED write value (uint8_t) to register
52 void regw_u8(volatile uint32_t * reg, uint8_t val, short shift, short flag) {
56 *reg = (val << shift);
59 *reg = *reg | (val << shift);
62 *reg = *reg & ~(val << shift);
67 /* DEPRECATED write value (uint32_t) to register
68 void regw_u32(volatile uint32_t * reg, uint32_t val, short shift, short flag) {
72 *reg = (val << shift);
75 *reg = *reg | (val << shift);
78 *reg = *reg & ~(val << shift);
83 /* Deprecated use printf instead
85 char * regtohex(uint32_t addr) {
86 char tmpbuf[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
87 memset(&hexbuf, 0, sizeof(uint32_t) * 8);
90 for (int i = 0; i < 8 ; i++) {
92 tmp = tmp >> (28 - (i * 4));
94 if ((tmp >= 0) && tmp < 10) {
95 hexbuf[i] = (char) tmp + 48;
98 hexbuf[i] = tmpbuf[tmp - 10];
104 // TODO: implement simple scanf functions
105 int singlehextoreg(char hex) {
108 if (hex >= 'A' && hex <= 'F')
118 uint32_t hextoreg(char * a) {
122 for(int i = 0; i < 8; i++) {
123 tmp = singlehextoreg(*a++);
124 x += tmp << (28 - (i * 4));