C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5683|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  g$ {  ?- @$ F6 Q. ^main文件:! w3 W: A" Y0 g9 z0 l
interrupt void interrupt4(void)  ) G  `; x, e' n" P
{
0 ]: X+ n' S1 n" a# t  Uint32 sample;
: G! i7 e( `. m' e) T% r8 v+ Q9 @
' Q3 c% _+ d2 D  k: `# A6 i9 K  sample = input_sample(); // read L + R samples from ADC5 x  p6 g/ E5 I: _" N
  output_sample(sample);   // write L + R samples to DAC $ f) g; k* B% f+ }: W. P
  return;) J# `* R. {( Y/ M
}* L+ Z3 H" {$ j# U( z1 N

* i! m; Y6 i# fint main( void )+ p/ [# h5 R; e% n4 F) i
{- v, X( M  i- a! r! c5 g+ F2 v
# D9 Q. G, P* [5 ~$ E7 C9 I1 E6 q
    /* Initialize BSL */
1 H: \' P& A5 y( }* K    EVMC6747_init( );
- v5 @' S* ^& g6 y        /* Call evmc6747_intr function */
! G  f2 d4 j; b1 O% p# {. {5 s' {  A    aic3106_init( );
1 K2 B$ T( N; B6 T9 i        while(1);+ d% n. i6 l, `  {& ?7 w
}
5 a. R- F% v; x5 d
6 ?/ F! ]/ A1 Z0 j0 \
1 J; ~6 q6 Z3 B2 h+ O$ Baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& Q$ h' W( E; `  q( Z/* Initialize MCASP1 */
8 v% j* N, L/ W" K6 h7 x/ _    mcasp = &MCASP_MODULE_1;/ Y0 W  c* j; t
    mcasp->regs->GBLCTL  = 0;       // Reset# z* {6 l4 f# k9 |: m& O) G, j
    mcasp->regs->RGBLCTL = 0;       // Reset RX# }- t7 @6 M) e+ L9 X/ g
    mcasp->regs->XGBLCTL = 0;       // Reset TX
, a4 ~) R9 ~, j/ W    mcasp->regs->PWRDEMU = 1;       // Free-running9 O2 P7 E% ~7 {3 ]) G, A
   // configure McASP0 receive registers" H# s) D: S" \6 C
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( ^& f+ n* ]1 ]( C1 U
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. Q7 h2 H. i# ^" O) r; X
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 f. c% n$ B& Y$ {) T+ O' E
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 J6 D( x: I1 {; s1 C2 R) N    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ b0 s  b$ T! K1 O# Y5 K- r, O
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- {: \/ N' }. v" }* e
    mcasp->regs->RINTCTL    = 0x00000000; // Not used. i# D9 i8 A, _% ]. ]
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* e' t+ `, \2 n; ^

* A# k. V3 S) S( r* T/ E    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: _4 X+ ~2 X. U' C+ b
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 I0 c; M4 c, u6 C3 Q( o; z5 e# K/ m    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 y5 ^8 R  [) R9 f% n8 _    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 j- \; }# \, z: Y3 n1 r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: s) L) B2 O' U  b6 i. P1 p
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1* o- Z& _7 l; b: t& G5 h4 z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 i: n" X% U7 o- Y* @; C7 B
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* x  G; t! k6 r! V  f* q

% x4 d; l1 S1 d' c- M6 n  Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- L8 j3 n- O( R, c! Q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( F5 n* V) K8 q. L- Z
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& W/ @' \3 c% T% W# F. q3 K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) Z! E, [- N7 `* V% |6 W/ T: C( k
% q) U) B% |) O* g$ C6 h    mcasp->regs->DITCTL     = 0x00000000; // Not used$ N. K! e% y/ a8 P+ C) @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 V; K) j* b9 m    mcasp->regs->AMUTE      = 0x00000000; // Not used
; Q" P4 h! }7 @' `4 ]4 L; }: G& Q+ I" G
/* Starting sections of the McASP*/& i9 D) N& |* A7 K. c: O
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
/ `8 ?4 Y! T* }5 f* V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 N6 o+ M2 E7 j0 @% q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! J, J' j* T; u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 Q3 F4 z- ?+ U

3 T. C- V! D# ?; N9 E4 X# l0 c    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  |& p+ M! x4 x) W! e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: {* P8 V& q7 A! [4 F0 o3 l9 a! X3 z* X% S6 F
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * e2 K% n' C% h) u9 Q, o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& Y/ A8 s0 [7 b% A) s

% H0 o, R0 T* @8 ]/ t5 w$ O    mcasp->regs->XSTAT = 0x0000ffff; # d7 }2 d/ S0 S4 {3 Z- Z
    mcasp->regs->RSTAT = 0x0000ffff; 4 [/ c3 C& J+ L
0 i1 ^# j# a* |
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( {% v! f4 y& D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ W& r2 v" e; P+ J3 Q$ _/ x
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * ~- k% s" j* j8 U. l& }$ X9 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
- w6 x; _: ~7 j7 @# q* ~- f' Q4 P( U0 s$ B$ g6 c
    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 c, N8 @: p7 c& u1 p- o7 G; V$ b    mcasp->regs->XBUF5 = 0;: F. m( R" j  S3 G4 E$ \# ~% d" i
    mcasp->regs->RBUF0 = 0;5 m  [2 @0 T( @  m. G
  s# [% M2 b/ }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 c( X6 ?3 P! o* X$ Q0 n
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ y  Z7 y3 u. F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ O, d. H" F* r- b7 H5 L6 }7 O/ ^, o- U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! f$ z, }8 c6 Q' y! W

$ m5 v  w. d; @' \: X) ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& ?* T5 E, |3 Z8 ^# L- M2 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 B/ u( `) Z0 |3 O7 X% B
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& ^. Y, K# G- Y2 n# ^! w, M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' P% t$ f/ b+ ~1 P( _: R
2 V: E$ \: z3 M; e* E$ e# D- f    CSR = 0x0000;
0 N0 v) h$ e+ ~) k/ \    INTC_INTMUX1 = 0x3d;( G0 C$ C) }) j+ @
    ISTP = (unsigned int)vectors;
2 q" i! i, p! F: B) K5 b    ICR = 0xFFF0;  
( \. Q9 {, j% r- k5 P    IER |= 0x12;  
. i% X  O5 \5 g- \/ s    CSR |= 0x01;  1 a7 Z# s# e5 t# L1 J7 p" n4 `$ s9 W! X

! B  n5 t# |3 Q* H* U
# j$ M1 n' O+ }4 i/ B, b
9 l: }- A0 k) f' P8 n1 B7 m  e还有就是两个输入输出函数:
$ T# C- _7 X' R: L: }* m- p; yvoid output_sample(Int32 out_data)3 e  |* V( Q. |. g5 b
{
0 _! X' y: Y' G+ G3 @" |! {  AIC31_data.uint = out_data;  
: U$ F/ |* f1 Z! m' ?9 J  MCASP1_XBUF5_32BIT = AIC31_data.uint;# o7 x+ w& M- V1 b
}3 R9 C2 a# T% c

% E# W5 c' k6 M$ C* h) SInt32 input_sample(void)
2 ?  q) B; K- g- E{  
# p2 a- x- O% R7 G" Q1 N( d: `* @  AIC31_data.uint = MCASP1_RBUF0_32BIT;; @3 V4 c3 }" J8 Z* u% }) W
  return (AIC31_data.uint);
4 {, p8 H! ~  r5 j6 y1 H. }' F}
! N1 d" F1 ]" s* @, z5 B! |8 y) N! p- j, w- S; I9 v1 R  s! U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-2 10:21 , Processed in 0.038291 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表