git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3642 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
8267937f49
commit
8fc9de2fdb
|
@ -120,6 +120,9 @@ void _port_init(void) {
|
||||||
{
|
{
|
||||||
uint32_t reg;
|
uint32_t reg;
|
||||||
|
|
||||||
|
/* Initializing the FPU context save in lazy mode.*/
|
||||||
|
SCB_FPCCR = FPCCR_ASPEN | FPCCR_LSPEN;
|
||||||
|
|
||||||
/* CP10 and CP11 set to full access.*/
|
/* CP10 and CP11 set to full access.*/
|
||||||
SCB_CPACR |= 0x00F00000;
|
SCB_CPACR |= 0x00F00000;
|
||||||
|
|
||||||
|
@ -132,9 +135,6 @@ void _port_init(void) {
|
||||||
reg = 0;
|
reg = 0;
|
||||||
asm volatile ("vmsr FPSCR, %0" : : "r" (reg) : "memory");
|
asm volatile ("vmsr FPSCR, %0" : : "r" (reg) : "memory");
|
||||||
SCB_FPDSCR = reg;
|
SCB_FPDSCR = reg;
|
||||||
|
|
||||||
/* Initializing the FPU context save in lazy mode.*/
|
|
||||||
SCB_FPCCR = FPCCR_ASPEN | FPCCR_LSPEN;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -150,6 +150,9 @@ void _port_init(void) {
|
||||||
* @brief Exception exit redirection to _port_switch_from_isr().
|
* @brief Exception exit redirection to _port_switch_from_isr().
|
||||||
*/
|
*/
|
||||||
void _port_irq_epilogue(void) {
|
void _port_irq_epilogue(void) {
|
||||||
|
#if CORTEX_USE_FPU
|
||||||
|
uint32_t fpccr;
|
||||||
|
#endif
|
||||||
|
|
||||||
port_lock_from_isr();
|
port_lock_from_isr();
|
||||||
if ((SCB_ICSR & ICSR_RETTOBASE)) {
|
if ((SCB_ICSR & ICSR_RETTOBASE)) {
|
||||||
|
@ -182,16 +185,14 @@ void _port_irq_epilogue(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#if CORTEX_USE_FPU
|
#if CORTEX_USE_FPU
|
||||||
{
|
/* Saving the special register SCB_FPCCR into the reserved offset of
|
||||||
uint32_t fpccr;
|
the Cortex-M4 exception frame.*/
|
||||||
|
(ctxp + 1)->fpccr = (regarm_t)(fpccr = SCB_FPCCR);
|
||||||
/* Saving the special register SCB_FPCCR.*/
|
#endif
|
||||||
ctxp->fpccr = (regarm_t)(fpccr = SCB_FPCCR);
|
#if CORTEX_USE_FPU
|
||||||
|
/* Now the FPCCR is modified in order to not restore the FPU status
|
||||||
/* Now the FPCCR is modified in order to not restore the FPU status
|
from the artificial return context.*/
|
||||||
from the artificial return context.*/
|
SCB_FPCCR = fpccr | FPCCR_LSPACT;
|
||||||
SCB_FPCCR = fpccr | FPCCR_LSPACT;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Note, returning without unlocking is intentional, this is done in
|
/* Note, returning without unlocking is intentional, this is done in
|
||||||
|
|
|
@ -75,11 +75,11 @@ static msg_t WorkerThread(void *arg) {
|
||||||
* GPT2 callback.
|
* GPT2 callback.
|
||||||
*/
|
*/
|
||||||
static void gpt2cb(GPTDriver *gptp) {
|
static void gpt2cb(GPTDriver *gptp) {
|
||||||
/* float f1, f2, f3, f4, f5;*/
|
/* float f1, f2, f3, f4, f5;
|
||||||
|
|
||||||
(void)gptp;
|
(void)gptp;
|
||||||
|
|
||||||
/* f1 = ff1(2);
|
f1 = ff1(2);
|
||||||
f2 = ff1(3);
|
f2 = ff1(3);
|
||||||
f3 = ff1(4);
|
f3 = ff1(4);
|
||||||
f5 = f1 + f2 + f3;
|
f5 = f1 + f2 + f3;
|
||||||
|
@ -87,14 +87,13 @@ static void gpt2cb(GPTDriver *gptp) {
|
||||||
f5 = ff2(f5, f4, f5, f4);
|
f5 = ff2(f5, f4, f5, f4);
|
||||||
if (f5 != 196)
|
if (f5 != 196)
|
||||||
chSysHalt();*/
|
chSysHalt();*/
|
||||||
volatile float f1 = ff1(67);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* GPT3 callback.
|
* GPT3 callback.
|
||||||
*/
|
*/
|
||||||
static void gpt3cb(GPTDriver *gptp) {
|
static void gpt3cb(GPTDriver *gptp) {
|
||||||
float f1, f2, f3, f4, f5;
|
/* float f1, f2, f3, f4, f5;
|
||||||
|
|
||||||
(void)gptp;
|
(void)gptp;
|
||||||
|
|
||||||
|
@ -105,7 +104,8 @@ static void gpt3cb(GPTDriver *gptp) {
|
||||||
f4 = ff1(4);
|
f4 = ff1(4);
|
||||||
f5 = ff2(f5, f4, f5, f4);
|
f5 = ff2(f5, f4, f5, f4);
|
||||||
if (f5 != 100)
|
if (f5 != 100)
|
||||||
chSysHalt();
|
chSysHalt();*/
|
||||||
|
volatile float f1 = ff1(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue