嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: [6 c7 o3 y0 M; _5 m' X5 }, b
Void UPP_TASK(Void)
: h* p- `- Z9 p
{
8 p3 n- D4 `+ @
- I2 ]* G2 |% D3 m3 T
int i,j,k,target_int_count=2;
4 ]5 d6 F9 K( c0 i- A* S
char ch[2];
3 l8 n& w; {1 c- ] @* I
4 w/ G \' } P# c6 s9 S
! t& S- U I$ \ v
1 ?$ H' e6 t" _; z8 I
upp_interrupt_count = 0;
2 i. k3 e. h8 F' z1 {' J: ?0 `! X8 z: `
upp_error_count = 0;
3 z* @- }4 e; @, a
, d3 ` t5 T! N, i J( F
UARTPuts("\tResetting uPP buffers...\r\n",-2);
) C( r) `) d. {4 c
// Initialize data buffers
O. H% @, B. d% {0 l! {7 x3 F
for (i = 0; i < upp_frame_size; i++)
: \& p; L- n6 _' P: J5 K- d% `' t
{
! V2 m( K: [3 c" N# ]$ M
upp_buffer_b
=i;
, z8 {) X# i2 W' e
upp_buffer_a
= 0xDEAD;
7 U3 c! z9 v3 `" j' N) o; ?
}
6 R6 i/ B ]* D* M+ v
0 b3 C" e1 e. F
//for(i=0;i<1024;i++)
/ q; d1 |2 ^, J1 p' _8 I; \
// temp
=0;
. Q' d8 O9 p8 F( f0 a0 T
: b- {2 l3 U$ G4 X' z# J
//UPPReset();
) I h% Z+ F* F1 e) q# x
/*启动UPP DMA传输*/
" [( |! b- t* S; E n2 N/ R3 C
UARTPuts("upp_prog_dma_i\n",-2);
6 u: v* B9 e v/ A5 W
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& a+ c" R3 K& Z! G$ z3 ?" j3 D
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 Y; n& z3 F, F' [9 |& _% A
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ }, K/ G v! r# D8 y/ P0 [
& b3 Z. D) f" `2 G6 w. L2 R
UARTPuts("upp_prog_dma_i\n",-2);
8 E. {) P# ?9 I. L
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
0 U+ U& d* x7 a. C& M& C: ~5 j( ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( m8 f, X# i B5 l% F: ?! }* n" f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
" Z1 w1 q V3 [
. N \: J$ g; L8 @* b# G7 d
/*等待UPP传输完毕*/
+ G6 P6 O/ A9 a- L
//i=0;
) K4 i M6 r' G# j
//j=0;
* b9 o# g2 V3 x; I5 i+ _* p
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
1 K4 T% R n( y) P4 V2 Y9 q' `' m
{
, f' u! s/ g5 c$ J
/* 测试UPP传输的同时操作普通DDR数据
0 Z2 }$ }) U. [8 o
temp
=i;
! {- v/ K" }2 G1 O! a& X% {
i++;
7 _# `7 @* K# g, O
if(i==1024)
* z4 n2 p% q- d0 l% L
{
. L( p, m7 M. m, |# D+ ^4 v
i=0;
+ v! j0 h: y' p( ?' @. A! f
j++;
; ^1 w$ `2 ~" I' M6 M
}
: r/ G N6 p' W- i
*/
9 L+ F( L# u& O- u7 y; a9 v
4 l7 U: W8 Z& f8 i
asm(" nop");
1 \0 J9 i- z( c) u2 K
; K6 n! h: k$ Q& ]3 r1 _
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 p9 C. D# O+ k. t2 ~ e; W# I8 E
}
5 F. \% u; c" @9 R% j9 q
, l9 C- C+ f* k" ?% N9 D% V# ~
/*检查UPP传输的数据是否正确 (loopback modes only)*/
: {% u5 R2 k; ~4 X# w* T! i
//UARTprintf( "i=%d\n",i);
3 h6 {( T* w5 f; x9 W& R
//UARTprintf( "j=%d\n",j);
" ?: ]" _: D- A& {, Y
UARTPuts("Data mismatch in buffers.\n",-2);
, I9 D8 J0 g! W
if (upp_interrupt_count == 2 && upp_error_count == 0)
! I- k! P: R% r2 I+ p
{
! k# Y: v/ }6 p) B& X: Q, Y
for (i = 0; i<upp_frame_size; i++)
; s3 Q# [8 u% |1 J
{
5 y& W0 X; q5 t8 h |
if (upp_buffer_a
!= upp_buffer_b
)
! g/ ]3 d4 B# y- R. B; K& W1 r+ Y( P
{
) |! E0 y' C% Q; s( x
upp_error_count++;
8 z! Y0 W i0 U) f! @
}
9 j+ j2 c! h6 E6 m5 Q, T
}
% H( z. `! t' ]2 G# q) Y' K) E0 p+ @
}
1 I; ~, z% E! [5 i& |& U
6 e; n% o+ f# Y- x2 S# B1 p1 i
/* 报告通信结果*/
5 }/ h. K# E; B* H
if(upp_error_count != 0)
, Q8 R. o) y+ W2 e
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# k1 a% |3 `9 [3 `3 g
else
9 g- E4 ^2 x+ G# I
UARTPuts("uPP transfers complete!\n",-2);
# y8 G# C% a/ k7 j" q
' b! [ h- R. \. M# {5 d+ p
UARTPuts("Do you want to print all the data?(y/n) ",-2);
3 Z, X" Q# R: N; r9 G
UARTGets(ch,2);
3 M, p$ z& h% U8 X8 u+ c+ r7 z* A" P4 _
UARTPuts("\n", -2);
; X9 l) U" `# w( C8 d- {: B
9 u# g1 f! \: ?1 E# t- z# U+ V
if(ch[0] == 'y')
0 `) r! g* j" g! m; F# r
{
4 H" T* K* ~, X, J6 x
/*打印全部读到的数据*/
6 Z) N* B& ^4 i5 R. |
for(i=0; i<upp_frame_size; )
0 A6 m( g) U% ^. c q
{
/ e0 {# \' S) m6 K8 x' N# G& o
for(j=0; j<5; j++)
8 T' X1 F5 C1 R& ]# z: x
{
5 P3 e Q/ `" @. N& b- s9 s
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
j9 Q: ~ `% D
i++;
, A* L1 k7 g# F
//if(i >= 4096)
% [1 l4 r4 T2 m
// break;
7 {" k$ V/ R0 l2 E. \
# S( V$ a7 f4 J5 L2 ^7 M
}
' p/ ^1 x: s& o+ X# {" T
UARTPuts("\n",-2);
3 f: Q' e; \& h+ ^/ A8 \. Z) l! M' e
}
4 G* M' W( O& [3 J6 j6 t) B
}
F4 |4 r5 I& N4 t0 ^7 C
7 D# M* N; U8 T% ?: q8 y5 J
}
# K" K- s$ ]( y2 Z* m2 [ h* C+ `
. N, _* M6 j. f+ r7 I) f
$ i5 p. L k% w s2 Z6 s G
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
4 s+ k& Y4 ^9 D+ }# d" y
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" ~) Q, S* x& t+ r
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4