UIF_BUS_RESET ist im Header-File gar nicht definiert. Meinst du
UIF_BUS_RST?
Die Zeile
1 | #define UIF_DETECT (USB_INT_FG_bit.UIF_BUS_RST)
|
ersetzt du einfach durch
1 | #define UIF_DETECT UIF_BUS_RST
|
Dann funktioniert auch
Du könntest aber auch den Bitfeldern (die du ja sowieso nicht direkt,
sondern nur über die Makros benutzt) andere Namen geben, bspw. so:
1 | typedef struct {
|
2 | unsigned char b0 : 1;
|
3 | unsigned char b1 : 1;
|
4 | unsigned char b2 : 1;
|
5 | unsigned char b3 : 1;
|
6 | unsigned char b4 : 1;
|
7 | unsigned char b5 : 1;
|
8 | unsigned char b6 : 1;
|
9 | unsigned char b7 : 1;
|
10 | } bits;
|
11 |
|
12 | // ...
|
13 |
|
14 | SFR union
|
15 | {
|
16 | unsigned char USB_INT_FG; // USB interrupt flag
|
17 | bits USB_INT_FG_bit;
|
18 | }@ 0xD8;
|
19 | #define UIF_BUS_RST (USB_INT_FG_bit.b0)
|
20 | #define UIF_DETECT (USB_INT_FG_bit.b0)
|
21 | #define UIF_TRANSFER (USB_INT_FG_bit.b1)
|
22 | #define UIF_SUSPEND (USB_INT_FG_bit.b2)
|
23 | #define UIF_HST_SOF (USB_INT_FG_bit.b3)
|
24 | #define UIF_FIFO_OV (USB_INT_FG_bit.b4)
|
25 | #define U_SIE_FREE (USB_INT_FG_bit.b5)
|
26 | #define U_TOG_OK (USB_INT_FG_bit.b6)
|
27 | #define U_IS_NAK (USB_INT_FG_bit.b7)
|
Die Struktur bits muss nur einmal für alle Register definiert werden,
was die Länge des Header-Files deutlich verkürzt.
Oder so:
1 | typedef struct {
|
2 | unsigned char b0 : 1;
|
3 | unsigned char b1 : 1;
|
4 | unsigned char b2 : 1;
|
5 | unsigned char b3 : 1;
|
6 | unsigned char b4 : 1;
|
7 | unsigned char b5 : 1;
|
8 | unsigned char b6 : 1;
|
9 | unsigned char b7 : 1;
|
10 | } bits;
|
11 |
|
12 | #define SBIT(reg, bit) (((volatile bits *)®)->b##bit)
|
13 |
|
14 | // ...
|
15 |
|
16 | SFR unsigned char USB_INT_FG @ 0xD8;
|
17 |
|
18 | #define UIF_BUS_RST SBIT(USB_INT_FG, 0)
|
19 | #define UIF_DETECT SBIT(USB_INT_FG, 0)
|
20 | #define UIF_TRANSFER SBIT(USB_INT_FG, 1)
|
21 | #define UIF_SUSPEND SBIT(USB_INT_FG, 2)
|
22 | #define UIF_HST_SOF SBIT(USB_INT_FG, 3)
|
23 | #define UIF_FIFO_OV SBIT(USB_INT_FG, 4)
|
24 | #define U_SIE_FREE SBIT(USB_INT_FG, 5)
|
25 | #define U_TOG_OK SBIT(USB_INT_FG, 6)
|
26 | #define U_IS_NAK SBIT(USB_INT_FG, 7)
|
PS: In dieser Zeile ist dir übrigens ein Underscore verrutscht:
1 | #define U_IS_NAK (USB_INT__FGbit.U_IS_NAK)
|
Es sollte wohl so heißen:
1 | #define U_IS_NAK (USB_INT_FG_bit.U_IS_NAK)
|