嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 G' M0 E% I* b% S7 ?2 N$ ?8 d. I
Void UPP_TASK(Void)
" D; Y6 E% G' Z4 G/ i/ u3 M( U5 j
{
. ?7 T o* `. W
( p5 ^, J! U8 \ R
int i,j,k,target_int_count=2;
: R3 o# }2 h+ L& c
char ch[2];
* s- z$ B& a9 `
/ S8 \0 }- z N: B5 b# |/ S
! x+ t. R- `5 u3 I/ Q
5 O; G" g* e v+ F; _- r
upp_interrupt_count = 0;
3 y/ o+ W, f7 O2 N; `+ i9 a& K" g
upp_error_count = 0;
* }# }, R+ {' F9 o# E% q1 D6 ?
/ W8 E# w# O/ t8 m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
4 B8 c( a y. ]3 |9 B$ K- o
// Initialize data buffers
4 C- ?% ^& e0 q' g3 R& G
for (i = 0; i < upp_frame_size; i++)
- N9 r4 }& d! i# e
{
3 `0 s' R- O, H- q4 d# Y
upp_buffer_b
=i;
+ U* z, N; l U9 p* }+ {
upp_buffer_a
= 0xDEAD;
! z3 u( ^7 Y4 P, k% F8 ~
}
* z @7 D2 F* @ n2 j
! S' s! E' U `! g
//for(i=0;i<1024;i++)
" O8 q: Z7 j, w) b$ g; P
// temp
=0;
; w$ w9 ?# q% s& c
' P- n" P- z$ u7 \
//UPPReset();
7 J1 H, b) e; A x. N/ u
/*启动UPP DMA传输*/
, u0 X, [' W; I* J) t& ?
UARTPuts("upp_prog_dma_i\n",-2);
, R/ m+ P. g' N, C0 T
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
# e/ b9 o' w" l' Z
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
2 f2 {+ q9 Q' n% W6 g7 w; g
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
9 a$ \ @ |$ J: @# T8 `* ?% q
4 D! c' l- K: P6 u* t0 j
UARTPuts("upp_prog_dma_i\n",-2);
; _7 `1 E1 |9 t+ C- L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
' g( J! c/ ^3 r8 o
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
; A9 ?; m. L5 k8 n( v. \, `. v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
$ t6 C+ }9 c- W1 X6 ^. D! ~* w
& w5 I& _0 {/ }& ]4 N u' E
/*等待UPP传输完毕*/
' E2 m# \7 Y3 o, o" e$ X
//i=0;
% l+ Y5 ?& |% H
//j=0;
" m, s: Y% n5 i4 Y- ?6 X! ~9 w
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
3 ~" E- ^3 k& ^6 f
{
( \ i) D( j8 b& s7 B9 ^
/* 测试UPP传输的同时操作普通DDR数据
K/ C7 X" ]; n( ]# U
temp
=i;
0 J L! _+ k' @3 W
i++;
' H1 b- C* I) h' i8 \% d
if(i==1024)
+ o* s3 Z7 w0 c% ?! _( p% b8 N
{
% q- z% Y: Y' n. X7 T! o4 h [1 u
i=0;
4 C* v B% x7 e# D) w- Q2 N; N
j++;
) P) ]% [0 r" {! l! y+ m! x: X
}
5 [3 d7 o y& z" L( p2 V
*/
/ S9 T7 N% q; h8 Q% k* a* C
& O. M# l/ q( ?% c3 I/ p
asm(" nop");
: G+ q3 x2 Y; n0 b5 r2 Z/ v7 b; K
# g# r, d7 D6 d$ D1 w
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
~* w& u( }# }# K
}
0 O2 y- Y: W- I& d: {/ ]
8 p1 y$ Y( q# N2 a$ n- }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
( y3 i# l. D8 X" j' ? ~
//UARTprintf( "i=%d\n",i);
; W; z8 J$ b2 H" |. z
//UARTprintf( "j=%d\n",j);
' Y1 E2 E- z4 g5 }
UARTPuts("Data mismatch in buffers.\n",-2);
* I! _" P" p' R5 }/ }
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 f+ Y! k' }! K! k. C( w
{
- F3 L+ `! z1 b& i, C
for (i = 0; i<upp_frame_size; i++)
' i4 I; u1 ? x/ @" T, O, V
{
% O8 V' C/ s X
if (upp_buffer_a
!= upp_buffer_b
)
2 u" ?5 F7 F7 k& a0 c
{
6 f5 U0 d: Z/ n* v- N
upp_error_count++;
4 H2 ?/ P0 Z5 G9 u* `
}
1 C ]6 p ?, ?: U' q5 P7 I
}
6 F9 @7 K, }6 g' j' Z/ Y
}
$ ]! f& r/ P% b1 S$ b
. U# g; `9 \. Z3 ?. d1 I( {- `+ X
/* 报告通信结果*/
- r4 g$ y$ p+ v: V
if(upp_error_count != 0)
# Z. k; ~! w5 K+ T
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& t1 R# Y. e5 R
else
1 s: \7 _4 ^( R3 V
UARTPuts("uPP transfers complete!\n",-2);
1 K( d2 T, y( Y& M" e# J- R
/ v0 d9 d. X/ B' l
UARTPuts("Do you want to print all the data?(y/n) ",-2);
8 T6 C* [) z9 G) w7 e3 h
UARTGets(ch,2);
, i: f1 u1 k# s' u# A. h1 d& s# x9 @4 }
UARTPuts("\n", -2);
& Z- w6 T9 z+ U* n
$ O7 A, H) w+ R' r$ c l8 W
if(ch[0] == 'y')
& D5 F7 `( D- g1 e3 S
{
5 q! Y& q* `8 l; b: p- }7 f* d" k2 }
/*打印全部读到的数据*/
' {" T, y( z$ t1 C, }
for(i=0; i<upp_frame_size; )
% d; {2 b4 d% R
{
) w ]7 j' u: s, r; g3 n
for(j=0; j<5; j++)
% \5 V8 p6 J9 }9 _+ p' T) ^
{
+ I' b0 c: T6 Q
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
# [7 c9 t3 w0 V1 f- A
i++;
6 J. ^2 E- D8 [( B$ L
//if(i >= 4096)
" M k1 I2 G( T# P( p- L& C# h
// break;
1 P; W/ x9 s% T* f2 B
, W) G2 G& v F" V
}
9 C0 L8 ~/ j& H# C2 Z/ r$ _ u& o
UARTPuts("\n",-2);
( _5 Z, e& Y5 z$ O* F( j
}
E, S6 y3 M6 l1 m: I5 u
}
: y7 x' m1 o' W, @; n5 t
/ m) Y8 V6 E! l" U) s1 T6 ^
}
! j" ~0 p( M! ^; C( g; y/ |% ]
; O" [4 ~( h! ]5 J7 I; p2 {
# H- v6 u" _: ^& B
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
0 F# Q! N6 m; _+ w8 `( w3 l
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
: d! B/ g0 z# L+ q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4