5 #include <lib/regfunc.h>
6 #include <lib/string.h>
12 // register set bit at position
13 void rsetbit(volatile uint32_t * reg, short pos) {
14 *reg = *reg | (0x1 << pos);
17 // register set bits from certain pos
18 void rsetbitsfrom(volatile uint32_t * reg, short pos, int val) {
19 *reg = *reg | (val << pos);
22 // register clear bit at position
23 void rclrbit(volatile uint32_t * reg, short pos) {
24 *reg = *reg & ~(0x1 << pos);
27 int rchkbit(volatile uint32_t * reg, short pos) {
28 if ((*reg >> pos) & 0x1)
33 // register (over)write
34 void rwrite(volatile uint32_t * reg, uint32_t val) {
39 /* write value (uint8_t) to register */
40 void regw_u8(volatile uint32_t * reg, uint8_t val, short shift, short flag) {
44 *reg = (val << shift);
47 *reg = *reg | (val << shift);
50 *reg = *reg & ~(val << shift);
55 /* write value (uint32_t) to register */
56 void regw_u32(volatile uint32_t * reg, uint32_t val, short shift, short flag) {
60 *reg = (val << shift);
63 *reg = *reg | (val << shift);
66 *reg = *reg & ~(val << shift);
71 /* Print out the hexidecimal representation of an integer
72 After implementation of scanf or sth this will be obsolete. */
75 char * regtohex(uint32_t addr) {
76 char tmpbuf[6] = {'A', 'B', 'C', 'D', 'E', 'F'};
77 memset(&hexbuf, 0, sizeof(uint32_t) * 8);
80 for (int i = 0; i < 8 ; i++) {
82 tmp = tmp >> (28 - (i * 4));
84 if ((tmp >= 0) && tmp < 10) {
85 hexbuf[i] = (char) tmp + 48;
88 hexbuf[i] = tmpbuf[tmp - 10];
93 int singlehextoreg(char hex) {
96 if (hex >= 'A' && hex <= 'F')
106 uint32_t hextoreg(char * a) {
110 for(int i = 0; i < 8; i++) {
111 tmp = singlehextoreg(*a++);
112 x += tmp << (28 - (i * 4));