git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@3188 35acf78f-673a-0410-8e92-d51de3d6d3f4

This commit is contained in:
gdisirio 2011-08-01 14:33:04 +00:00
parent b077c0f2cc
commit 0c276798fd
3 changed files with 65 additions and 42 deletions

View File

@ -143,49 +143,50 @@ void _pal_lld_setgroupmode(ioportid_t port,
ioportmask_t mask,
iomode_t mode) {
uint32_t modemask = ((mode & PAL_STM32_MODE_MASK) >> 0) & 3;
uint32_t otypemask = ((mode & PAL_STM32_OTYPE_MASK) >> 2) & 1;
uint32_t ospeedmask = ((mode & PAL_STM32_OSPEED_MASK) >> 3) & 3;
uint32_t pupdrmask = ((mode & PAL_STM32_PUDR_MASK) >> 5) & 15;
uint32_t bit = 0;
while (mask) {
uint32_t moder = (mode & PAL_STM32_MODE_MASK) >> 0;
uint32_t otyper = (mode & PAL_STM32_OTYPE_MASK) >> 2;
uint32_t ospeedr = (mode & PAL_STM32_OSPEED_MASK) >> 3;
uint32_t pupdr = (mode & PAL_STM32_PUDR_MASK) >> 5;
uint32_t altr = (mode & PAL_STM32_ALTERNATE_MASK) >> 7;
uint32_t bit = 0;
while (TRUE) {
if ((mask & 1) != 0) {
uint32_t m4 = 15 < ((bit & 7) * 4);
uint32_t altmask = ((mode & PAL_STM32_ALTERNATE_MASK) >> 7) <<
((bit & 7) * 4);
uint32_t altrmask, m1, m2, m4;
altrmask = altr << ((bit & 7) * 4);
m4 = 15 << ((bit & 7) * 4);
if (bit < 8)
port->AFRL = (port->AFRL & ~m4) | altmask;
port->AFRL = (port->AFRL & ~m4) | altrmask;
else
port->AFRH = (port->AFRH & ~m4) | altmask;
port->OTYPER = (port->OTYPER & ~(1 << bit)) | otypemask;
port->OSPEEDR = (port->OSPEEDR & ~(3 << (bit * 2))) | ospeedmask;
port->PUPDR = (port->PUPDR & ~(3 << (bit * 2))) | pupdrmask;
port->MODER = (port->MODER & ~(3 << (bit * 2))) | modemask;
port->AFRH = (port->AFRH & ~m4) | altrmask;
m1 = 1 << bit;
port->OTYPER = (port->OTYPER & ~m1) | otyper;
m2 = 3 << (bit * 2);
port->OSPEEDR = (port->OSPEEDR & ~m2) | ospeedr;
port->PUPDR = (port->PUPDR & ~m2) | pupdr;
port->MODER = (port->MODER & ~m2) | moder;
}
modemask <<= 2;
otypemask <<= 1;
ospeedmask <<= 2;
pupdrmask <<= 2;
bit++;
mask >>= 1;
if (!mask)
return;
otyper <<= 1;
ospeedr <<= 2;
pupdr <<= 2;
moder <<= 2;
bit++;
}
}
#else
void _pal_lld_setgroupmode(ioportid_t port,
ioportmask_t mask,
iomode_t mode) {
uint32_t afrm, moderm, pupdrm, otyperm, ospeedrm;
uint32_t m1 = (uint32_t)mask;
uint32_t m2 = 0;
uint32_t m4l = 0;
uint32_t m4h = 0;
uint32_t moder = (((mode & PAL_STM32_MODE_MASK) >> 0) & 3) * 0x5555;
uint32_t otyper = (((mode & PAL_STM32_OTYPE_MASK) >> 2) & 1) * 0xffff;
uint32_t ospeedr = (((mode & PAL_STM32_OSPEED_MASK) >> 3) & 3) * 0x5555;
uint32_t pupdr = (((mode & PAL_STM32_PUDR_MASK) >> 5) & 3) * 0x5555;
uint32_t afr = (((mode & PAL_STM32_ALTERNATE_MASK) >> 7) & 15) * 0x1111;
uint32_t bit = 0;
while (mask) {
do {
if ((mask & 1) != 0) {
m2 |= 3 << bit;
if (bit < 16)
@ -195,13 +196,23 @@ void _pal_lld_setgroupmode(ioportid_t port,
}
bit += 2;
mask >>= 1;
}
port->AFRL = (port->AFRL & ~m4l) | (afr & m4l);
port->AFRH = (port->AFRH & ~m4h) | (afr & m4h);
port->OSPEEDR = (port->OSPEEDR & ~m2) | (ospeedr & m2);
port->OTYPER = (port->OTYPER & ~m1) | (otyper & m1);
port->PUPDR = (port->PUPDR & ~m2) | (pupdr & m2);
port->MODER = (port->MODER & ~m2) | (moder & m2);
} while (mask);
afrm = ((mode & PAL_STM32_ALTERNATE_MASK) >> 7) * 0x1111;
port->AFRL = (port->AFRL & ~m4l) | (afrm & m4l);
port->AFRH = (port->AFRH & ~m4h) | (afrm & m4h);
ospeedrm = ((mode & PAL_STM32_OSPEED_MASK) >> 3) * 0x5555;
port->OSPEEDR = (port->OSPEEDR & ~m2) | (ospeedrm & m2);
otyperm = ((mode & PAL_STM32_OTYPE_MASK) >> 2) * 0xffff;
port->OTYPER = (port->OTYPER & ~m1) | (otyperm & m1);
pupdrm = ((mode & PAL_STM32_PUDR_MASK) >> 5) * 0x5555;
port->PUPDR = (port->PUPDR & ~m2) | (pupdrm & m2);
moderm = ((mode & PAL_STM32_MODE_MASK) >> 0) * 0x5555;
port->MODER = (port->MODER & ~m2) | (moderm & m2);
}
#endif

View File

@ -90,13 +90,15 @@ typedef struct {
*
* @api
*/
#if !defined(chDbgCheck)
#define chDbgCheck(c, func) { \
if (!(c)) \
chDbgPanic(__QUOTE_THIS(func)"(), line "__QUOTE_THIS(__LINE__)); \
chDbgPanic(__QUOTE_THIS(func)"()"); \
}
#endif /* !defined(chDbgCheck) */
#else /* !CH_DBG_ENABLE_CHECKS */
#define chDbgCheck(c, func) { \
(void)(c), (void)__QUOTE_THIS(func)"(), line "__QUOTE_THIS(__LINE__); \
(void)(c), (void)__QUOTE_THIS(func)"()"; \
}
#endif /* !CH_DBG_ENABLE_CHECKS */
@ -118,10 +120,12 @@ typedef struct {
*
* @api
*/
#if !defined(chDbgAssert)
#define chDbgAssert(c, m, r) { \
if (!(c)) \
chDbgPanic(m); \
}
#endif /* !defined(chDbgAssert) */
#else /* !CH_DBG_ENABLE_ASSERTS */
#define chDbgAssert(c, m, r) {(void)(c);}
#endif /* !CH_DBG_ENABLE_ASSERTS */

View File

@ -61,10 +61,12 @@
+--test/ - Kernel test suite source code.
| +--coverage/ - Code coverage project.
+--testhal/ - HAL integration test demos.
+--LPC11xx/ - LPC11xx HAL test demos.
+--LPC13xx/ - LPC13xx HAL test demos.
+--STM32/ - STM32 HAL test demos.
+--STM8S/ - STM8S HAL test demos.
| +--LPC11xx/ - LPC11xx HAL test demos.
| +--LPC13xx/ - LPC13xx HAL test demos.
| +--STM32/ - STM32 HAL test demos.
| +--STM8S/ - STM8S HAL test demos.
+--tools - Various tools.
+--eclipse - Eclipse enhancements.
*****************************************************************************
*** Releases ***
@ -85,6 +87,12 @@
(backported to 2.2.4).
- FIX: Fixed timeout problem in the lwIP interface layer (bug 3302420)
(backported to 2.2.4).
- NEW: Added debug plugin for Eclipse under ./tools/eclipse (backported to
2.2.7).
- NEW: The debug macros chDbgCheck() and chDbgAssert() now can be externally
redefined. The macro chDbgCheck() no more includes the line number in the
description because incompatibility with the Cosmic compiler (backported to
2.2.7).
- NEW: Added provisional support for STM32L1xx and STM32F2xx. Because of this
some directories related to the STM32 have been renamed, your makefiles may
require adjustments.
@ -92,10 +100,10 @@
to add an user rule into the Makefiles.
- NEW: Improvements to the trace buffer, now it stores a full thread pointer
and event time, changed names to debug variables by adding the "dbg_"
prefix.
prefix (backported to 2.2.7).
- NEW: Added a new functionality to the registry subsystem, now it is possible
to associate a name to the threads using chRegSetThreadName. The main and
idle threads have their name assigned by default.
idle threads have their name assigned by default (backported to 2.2.7).
- NEW: Added TIM8 support to the STM32 GPT, ICU and PWM drivers.
- NEW: Updated the STM32 header file to the latest version 3.5.0 and fixed
it in order to correct several bugs related to the XL family.