嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 B5 H3 Q2 ? ?% @
Void UPP_TASK(Void)
0 R$ H: P; [$ H- T6 B3 |
{
$ w9 x' y7 ~$ ^+ x! ?7 y/ c
L, |6 I. u/ O4 W
int i,j,k,target_int_count=2;
0 R* ^9 P+ g1 w5 f& D0 x# d; s
char ch[2];
( ]* R# S3 z2 ~3 V. i
! w d' {: O0 {# G3 g
9 h3 }6 G/ X( H. _% y% p
* K( r8 l y3 \4 b( `$ x
upp_interrupt_count = 0;
1 F2 R! R6 U9 @7 o J0 ~# w
upp_error_count = 0;
1 c9 i/ s; O: l% g
5 W* l# r0 O1 ~- b8 R( i
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 a+ x, G0 I8 ?& {
// Initialize data buffers
6 [8 v* A, r% L% l
for (i = 0; i < upp_frame_size; i++)
3 }8 y5 Y2 |( T! ?1 u
{
; H7 \/ s" Q! K+ k4 ^) Z2 |
upp_buffer_b
=i;
5 e: g1 R2 |; \- i! z
upp_buffer_a
= 0xDEAD;
! p" E- [# {; t& g' s
}
. w* f8 }6 ^1 s! w; X( y
! {: }3 N: o l ~
//for(i=0;i<1024;i++)
# O9 L% _* E2 ]9 J$ d1 K% b
// temp
=0;
( g7 w5 P2 {8 U" m
' f' S6 D) D/ L) T k R
//UPPReset();
% P4 a: g6 Y/ Q* D$ @/ p
/*启动UPP DMA传输*/
* P' l1 z H* m( [4 F6 A7 d
UARTPuts("upp_prog_dma_i\n",-2);
( |- A `- A; B- p b, t( P# d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
6 R' u6 P+ o* G- n$ N
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ I) w0 C1 w& {6 q5 L* X$ A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 C% ?" \* l4 ~) E& B/ _% C
- b0 D) G U" {( Q: o2 C
UARTPuts("upp_prog_dma_i\n",-2);
5 e. A1 ~( I. [9 c
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
, \" I9 {. z' v# _0 {& S3 i+ o$ }
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
5 m" `/ W4 e0 _3 ?) f J& H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
+ B7 D# j1 y1 T+ r
* b- Z& Q/ ^( f" `
/*等待UPP传输完毕*/
# U. i9 z, @' r# \8 V" W. E9 ~: u
//i=0;
3 _) @* x0 ^2 [6 Q1 u8 Z
//j=0;
% Y* E! p9 B3 T3 g. |4 M
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
. v! r" H* e- U4 H+ ^
{
8 |5 z' G) I( Q9 `" X! c- K
/* 测试UPP传输的同时操作普通DDR数据
- a0 M' ?4 E& J0 w
temp
=i;
$ T7 _ D. w5 D3 w/ e
i++;
0 E) E$ _# C" W+ A
if(i==1024)
! E( V' e8 l5 S W$ ^2 ?# [
{
+ G5 m" i' x' X) {/ \3 \! l
i=0;
& i: N ]: v- d! `( F/ ?4 \7 B
j++;
/ g6 Y5 ?& i' g# b* a
}
+ i& F% G! w7 X; b' }9 c
*/
& U8 q' @1 v" P
8 W \9 d" N/ i; H
asm(" nop");
+ p0 @; ?: C3 p: X0 Q( {
' x* y5 t% d+ C
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
1 m; G7 l, W1 |$ Z1 F
}
- A0 |8 a$ z+ |2 T/ l# U
) d, V6 _6 \) V% K' p9 ^ F% {
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# I1 d4 y& S) i( X7 G: z
//UARTprintf( "i=%d\n",i);
6 P. Q/ d% @ X- f+ H* R7 D& V
//UARTprintf( "j=%d\n",j);
C+ \' e4 m) H5 Z! i
UARTPuts("Data mismatch in buffers.\n",-2);
9 j" r* a8 K7 |- c3 b
if (upp_interrupt_count == 2 && upp_error_count == 0)
; o) w P* ?2 X" _* W y" Q8 M
{
/ c' G3 @% m8 j
for (i = 0; i<upp_frame_size; i++)
& w$ Y: R! @/ G4 `* A! y9 G
{
* c9 V2 U- ]) N" X; B9 L9 f8 x
if (upp_buffer_a
!= upp_buffer_b
)
& y1 A) B9 S L7 ~/ u; U
{
F2 P- w, v/ N3 F& o1 N( X" a
upp_error_count++;
2 U) q7 e6 F: N# ~# {0 c. C
}
! |4 l4 o9 D3 e. e# K0 [0 I
}
4 J0 U- n7 a, x' G2 \- L
}
, r3 @/ m* O7 C
" n, E# Y7 @9 v* p2 T+ [0 a
/* 报告通信结果*/
8 o- O5 D9 b4 [2 U) E7 C% g( {
if(upp_error_count != 0)
5 T7 A3 q$ G3 z0 ~9 |' D( a
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* m) K# T( v+ _" ~, b2 I
else
2 F* m3 R- z3 F% B& V1 S5 d5 s
UARTPuts("uPP transfers complete!\n",-2);
" u& o, K5 {3 w/ }
3 E0 l6 N6 b n4 I' k5 C8 u, [
UARTPuts("Do you want to print all the data?(y/n) ",-2);
) G( q, `5 B/ l# T0 d
UARTGets(ch,2);
; p* w3 z/ ?2 y- e
UARTPuts("\n", -2);
. Z4 K% F, g2 g" P# M( [: I; i4 Z
' X$ V, d, J, f- y) _9 P9 X
if(ch[0] == 'y')
( |8 j; T ~2 m* ]9 i g8 M: U
{
1 ?2 p$ z5 I! Y/ K& s! |7 m8 `7 a
/*打印全部读到的数据*/
$ \ ]! q; w C8 U: }
for(i=0; i<upp_frame_size; )
) o4 M8 i f1 t8 n
{
( x/ K: k; {* b' [
for(j=0; j<5; j++)
8 W2 R" @1 A* ?, H+ C# g' [* ]
{
* x% k. S8 ?, h
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; E3 S# X( p8 S1 q
i++;
( R* b+ G8 t/ s
//if(i >= 4096)
9 ^! Q9 }. X/ U; u3 {" Q7 ~
// break;
6 w$ x: b) B, n7 W& F# d0 f* _1 p
@: k& G1 F9 T0 Z6 b; n# {
}
- T! B6 H1 _4 M) j
UARTPuts("\n",-2);
0 X: z) Q. Q+ i
}
( B! x' P% a. p
}
# {9 g% V) f& d6 ?& E- h* W
# b2 {' h: Q: W" @0 L0 e; t
}
H" j& r) s' c! W
( y7 V; g! u9 g3 }$ R+ ? f" r
" J) ?5 a. P' G, h1 B. x# u/ C
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
; I8 I1 n# T q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
3 L: [ ~1 k0 p3 K2 z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4