- cortex_m3_build_reg_cache(target);
- ahbap_debugport_init(swjdp);
-
- /* Read from Device Identification Registers, IS THIS CORTEX OR Luminary Micro SPECIFIC ?? */
- target_read_u32(target, CPUID, &cpuid );
- if (cpuid == 0x410fc231)
- DEBUG("CORTEX-M3 processor");
- DEBUG("cpuid %x",cpuid);
- /* Probably only valid for LMI parts, move to flash/stellaris ? */
- target_read_u32(target, SYSTEM_CONTROL_BASE|0x04, &did1);
- target_read_u32(target,SYSTEM_CONTROL_BASE|0x08,&dc0);
- DEBUG("did1 %x",did1);
- DEBUG("dc0 %x",dc0);
-
- target_read_u32(target,NVIC_ICTR,&ictr);
- cortex_m3->intlinesnum = (ictr&0x1F) + 1;
- cortex_m3->intsetenable = calloc(cortex_m3->intlinesnum,4);
- for (i=0;i<cortex_m3->intlinesnum;i++)
- {
- target_read_u32(target,NVIC_ISE0+4*i,cortex_m3->intsetenable+i);
- DEBUG(" interrupt enable[%i]=0x%x",i,cortex_m3->intsetenable[i]);
- }
-
- /* Setup FPB */
- target_read_u32(target, FP_CTRL, &fpcr);
- cortex_m3->auto_bp_type = 1;
- cortex_m3->fp_num_code = (fpcr>>4)&0xF;
- cortex_m3->fp_num_lit = (fpcr>>8)&0xF;
- cortex_m3->fp_code_available = cortex_m3->fp_num_code;
- cortex_m3->fp_comparator_list=calloc(cortex_m3->fp_num_code+cortex_m3->fp_num_lit, sizeof(cortex_m3_fp_comparator_t));
- for (i=0;i<cortex_m3->fp_num_code+cortex_m3->fp_num_lit;i++)
- {
- cortex_m3->fp_comparator_list[i].type = (i<cortex_m3->fp_num_code)?FPCR_CODE:FPCR_LITERAL;
- cortex_m3->fp_comparator_list[i].fpcr_address = FP_COMP0+4*i;
- }
- DEBUG("FPB fpcr 0x%x, numcode %i, numlit %i",fpcr,cortex_m3->fp_num_code,cortex_m3->fp_num_lit);
-
- /* Setup DWT */
- target_read_u32(target, DWT_CTRL, &dwtcr);
- cortex_m3->dwt_num_comp = (dwtcr>>28)&0xF;
- cortex_m3->dwt_comp_available = cortex_m3->dwt_num_comp;
- cortex_m3->dwt_comparator_list=calloc(cortex_m3->dwt_num_comp, sizeof(cortex_m3_dwt_comparator_t));
- for (i=0; i<cortex_m3->dwt_num_comp; i++)
- {
- cortex_m3->dwt_comparator_list[i].dwt_comparator_address = DWT_COMP0+0x10*i;
- }
-