Index: embios/branches/4g_compat/init.c |
— | — | @@ -28,6 +28,8 @@ |
29 | 29 |
|
30 | 30 | static const char welcomestring[] INITCONST_ATTR = "emBIOS v" VERSION "\n";
|
31 | 31 |
|
| 32 | +#include "s5l8720.h"
|
| 33 | +
|
32 | 34 | void init() INITCODE_ATTR;
|
33 | 35 | void init()
|
34 | 36 | {
|
— | — | @@ -36,10 +38,7 @@ |
37 | 39 | cputs(1, welcomestring);
|
38 | 40 | while(1)
|
39 | 41 | {
|
40 | | - uint8_t x = accel_get_axis(0);
|
41 | | - uint8_t y = accel_get_axis(1);
|
42 | | - uint8_t z = accel_get_axis(2);
|
43 | | - cprintf(1, "x:%d y:%d z:%d\n", x, y, z);
|
| 42 | + cprintf(1, "TBCNT: %d \n", TBCNT);
|
44 | 43 | }
|
45 | 44 |
|
46 | 45 | }
|
Index: embios/branches/4g_compat/target/ipodnano4g/timer.c |
— | — | @@ -29,5 +29,30 @@ |
30 | 30 |
|
31 | 31 | void setup_tick()
|
32 | 32 | {
|
| 33 | + int cycles = SYSTEM_TICK / 100;
|
| 34 | +
|
| 35 | + TACMD = (1 << 1); /* TA_CLR */
|
| 36 | + TBCMD = (1 << 1); /* TB_CLR */
|
| 37 | + TCCMD = (1 << 1); /* TC_CLR */
|
| 38 | + TDCMD = (1 << 1); /* TD_CLR */
|
| 39 | + TECMD = (1 << 1); /* TE_CLR */
|
| 40 | + TFCMD = (1 << 1); /* TF_CLR */
|
| 41 | + TGCMD = (1 << 1); /* TG_CLR */
|
| 42 | + THCMD = (1 << 1); /* TH_CLR */
|
| 43 | +
|
| 44 | + /* configure timer for 10 kHz */
|
| 45 | + TBPRE = 208 - 1; /* prescaler */
|
| 46 | + TBCON = (0 << 13) | /* TB_INT1_EN */
|
| 47 | + (1 << 12) | /* TB_INT0_EN */
|
| 48 | + (0 << 11) | /* TB_START */
|
| 49 | + (3 << 8) | /* TB_CS = PCLK / 64 */
|
| 50 | + (0 << 4); /* TB_MODE_SEL = interval mode */
|
| 51 | + TBDATA0 = cycles; /* set interval period */
|
| 52 | + TBCMD = (1 << 0); /* TB_EN */
|
33 | 53 | }
|
34 | 54 |
|
| 55 | +void INT_TIMERB(void)
|
| 56 | +{
|
| 57 | + TBCON = TBCON;
|
| 58 | + scheduler_switch(-1);
|
| 59 | +}
|
Index: embios/branches/4g_compat/target/ipodnano4g/crt0.S |
— | — | @@ -84,7 +84,7 @@ |
85 | 85 | ldr sp, =_abortstackend
|
86 | 86 | msr cpsr_c, #0xdb
|
87 | 87 | ldr sp, =_abortstackend
|
88 | | - msr cpsr_c, #0xd3
|
| 88 | + msr cpsr_c, #0xdf
|
89 | 89 | ldr sp, =_initstackend
|
90 | 90 | bl init
|
91 | 91 | bl context_switch
|
Index: embios/branches/4g_compat/target/ipodnano4g/s5l8720.h |
— | — | @@ -269,6 +269,30 @@ |
270 | 270 | #define TDDATA1 (*((volatile uint32_t*)(0x3C70006C)))
|
271 | 271 | #define TDPRE (*((volatile uint32_t*)(0x3C700070)))
|
272 | 272 | #define TDCNT (*((volatile uint32_t*)(0x3C700074)))
|
| 273 | +#define TECON (*((volatile uint32_t*)(0x3C7000A0)))
|
| 274 | +#define TECMD (*((volatile uint32_t*)(0x3C7000A4)))
|
| 275 | +#define TEDATA0 (*((volatile uint32_t*)(0x3C7000A8)))
|
| 276 | +#define TEDATA1 (*((volatile uint32_t*)(0x3C7000AC)))
|
| 277 | +#define TEPRE (*((volatile uint32_t*)(0x3C7000B0)))
|
| 278 | +#define TECNT (*((volatile uint32_t*)(0x3C7000B4)))
|
| 279 | +#define TFCON (*((volatile uint32_t*)(0x3C7000C0)))
|
| 280 | +#define TFCMD (*((volatile uint32_t*)(0x3C7000C4)))
|
| 281 | +#define TFDATA0 (*((volatile uint32_t*)(0x3C7000C8)))
|
| 282 | +#define TFDATA1 (*((volatile uint32_t*)(0x3C7000CC)))
|
| 283 | +#define TFPRE (*((volatile uint32_t*)(0x3C7000D0)))
|
| 284 | +#define TFCNT (*((volatile uint32_t*)(0x3C7000D4)))
|
| 285 | +#define TGCON (*((volatile uint32_t*)(0x3C7000E0)))
|
| 286 | +#define TGCMD (*((volatile uint32_t*)(0x3C7000E4)))
|
| 287 | +#define TGDATA0 (*((volatile uint32_t*)(0x3C7000E8)))
|
| 288 | +#define TGDATA1 (*((volatile uint32_t*)(0x3C7000EC)))
|
| 289 | +#define TGPRE (*((volatile uint32_t*)(0x3C7000F0)))
|
| 290 | +#define TGCNT (*((volatile uint32_t*)(0x3C7000F4)))
|
| 291 | +#define THCON (*((volatile uint32_t*)(0x3C700100)))
|
| 292 | +#define THCMD (*((volatile uint32_t*)(0x3C700104)))
|
| 293 | +#define THDATA0 (*((volatile uint32_t*)(0x3C700108)))
|
| 294 | +#define THDATA1 (*((volatile uint32_t*)(0x3C70010C)))
|
| 295 | +#define THPRE (*((volatile uint32_t*)(0x3C700110)))
|
| 296 | +#define THCNT (*((volatile uint32_t*)(0x3C700114)))
|
273 | 297 | uint64_t read_5usec_timer();
|
274 | 298 | #define FIVE_USEC_TIMER (read_5usec_timer()) /* 64bit 5usec timer */
|
275 | 299 |
|
Index: embios/branches/4g_compat/target/ipodnano4g/interrupt.c |
— | — | @@ -38,6 +38,10 @@ |
39 | 39 | default_interrupt(INT_TIMERB);
|
40 | 40 | default_interrupt(INT_TIMERC);
|
41 | 41 | default_interrupt(INT_TIMERD);
|
| 42 | +default_interrupt(INT_TIMERE);
|
| 43 | +default_interrupt(INT_TIMERF);
|
| 44 | +default_interrupt(INT_TIMERG);
|
| 45 | +default_interrupt(INT_TIMERH);
|
42 | 46 | default_interrupt(INT_DMA0);
|
43 | 47 | default_interrupt(INT_DMA1);
|
44 | 48 | default_interrupt(INT_DMA2);
|
— | — | @@ -80,7 +84,7 @@ |
81 | 85 |
|
82 | 86 | static void (* const timervector[])(void) IDATA_ATTR =
|
83 | 87 | {
|
84 | | - INT_TIMERA,INT_TIMERB,INT_TIMERC,INT_TIMERD
|
| 88 | + INT_TIMERA,INT_TIMERB,INT_TIMERC,INT_TIMERD,INT_TIMERE,INT_TIMERF,INT_TIMERG,INT_TIMERH
|
85 | 89 | };
|
86 | 90 |
|
87 | 91 | void INT_TIMER(void) ICODE_ATTR;
|
— | — | @@ -90,6 +94,10 @@ |
91 | 95 | if (TBCON & 0x00038000) timervector[1]();
|
92 | 96 | if (TCCON & 0x00038000) timervector[2]();
|
93 | 97 | if (TDCON & 0x00038000) timervector[3]();
|
| 98 | + if (TECON & 0x00038000) timervector[4]();
|
| 99 | + if (TFCON & 0x00038000) timervector[5]();
|
| 100 | + if (TGCON & 0x00038000) timervector[6]();
|
| 101 | + if (THCON & 0x00038000) timervector[7]();
|
94 | 102 | }
|
95 | 103 |
|
96 | 104 | static void (* const dmavector[])(void) IDATA_ATTR =
|