C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" r8 y) a8 |: \/ Tmain文件:
& b. r" ]7 ^! Z8 C% U/ T- i& qinterrupt void interrupt4(void)  
- C- ]: q( V( Y8 {{- C! U/ g+ D6 V; H
  Uint32 sample;/ k; L! e6 R7 O' g: o, g* p
" B6 M+ g/ q2 Y4 U3 m$ A' A
  sample = input_sample(); // read L + R samples from ADC
) r& ~1 K+ a8 Z5 R/ n  output_sample(sample);   // write L + R samples to DAC & d% D- P+ P$ F" M  |
  return;
  d' k6 |' M8 x  F}4 K' e4 N/ T/ y  p
* H( e) b7 J4 f  K  g7 R7 }  L% C( M
int main( void )7 s% }3 k+ M6 n. T
{
1 @: v7 c) @( x
( w, K& e. i" n5 d    /* Initialize BSL */
  |- s# I0 _) Y4 [    EVMC6747_init( );) a% L0 O& F& `$ h5 u
        /* Call evmc6747_intr function */
, |0 v5 Y. W. h* i+ L6 h( Y$ S( W    aic3106_init( );) G! d& g5 n  K1 M% b- o* |
        while(1);
. o  m3 N/ |& {, j}/ Q$ A2 Y$ P" R
: r+ r0 l, L, t2 B

  E2 y/ _8 T! h8 g7 Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 n- z  Z5 v1 S# n* f. R  O/* Initialize MCASP1 */2 P; j5 |8 r" }  B" w
    mcasp = &MCASP_MODULE_1;
% S. R" j( m- E! |6 k    mcasp->regs->GBLCTL  = 0;       // Reset) o$ ^7 j& v/ y7 B2 D2 Q! T
    mcasp->regs->RGBLCTL = 0;       // Reset RX& i' i2 _' E3 t  O
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  C3 Z& t! d; h& r0 E    mcasp->regs->PWRDEMU = 1;       // Free-running
( B, b9 R+ }9 [' g- _6 C8 N   // configure McASP0 receive registers8 E  L  r# f' _/ G( U2 }" K' O) `
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 S* c6 j4 [1 Q7 b/ x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' |7 L' P6 g7 j2 M
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- |1 |* X- [! I" }  \# ]3 c9 j' Q' z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( C: F+ C1 U& s4 |" I. H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' f0 l- D2 Q3 M# \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 W% Y0 M5 ]# W$ N    mcasp->regs->RINTCTL    = 0x00000000; // Not used; A) I' b' f3 K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 c0 L+ z% A! }" k5 G- C) m$ ?- V+ Q4 C2 O/ t6 k" J
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 q% D% c7 a  c
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 h' i. S8 b, {1 Y+ S, E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) o. w5 b7 e, \2 V: o; r# G! s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) x" k3 |8 p; A6 z# @- k5 H
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% j$ O) x6 v, S, X& F% W3 [- V" ~+ o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) I. k6 K( q: K+ N% T, h! t    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  l2 \3 D1 G* ?% c( O( r5 r
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: E& _- ~+ g+ n4 M" U& }# d: x: j
& ~6 p) h" ?+ w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! ^: P8 C0 W/ M0 a, r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( u8 r( y6 X" u* h: B4 m
    mcasp->regs->PFUNC      = 0;          // All MCASPs, h6 }* r) Q( Z! l' S2 t
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. A- u- U' Y, E( K, z6 f
7 H: g* [0 d/ h! O  a& X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% H7 Z  i7 C) I/ b0 ^4 }: _" ]    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 J7 L3 v0 M! N- q
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 W7 f8 e" b! \  t  y7 s

' @" C: `; o) c8 Z' ?9 B5 q/* Starting sections of the McASP*/1 ]; ~# i4 p0 x, J& y+ e
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ v/ k" e9 Y# D; W8 G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - E: f3 \, b# H
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 G" w' ]/ z3 z% @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ B6 m. A8 J$ M. Z! R" _3 z

1 \5 k& J! E9 ]+ v8 ^! U    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
* ?. B6 {  e5 d5 s4 f  x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 E6 _9 _* j2 w% R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
6 _+ h9 D; J3 ~6 l1 C- r; C+ r( T: b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) I3 Q9 B' z: F5 y. R/ F4 U! Y
. Y5 p  b1 I1 A7 A7 M" ]/ ^1 _
    mcasp->regs->XSTAT = 0x0000ffff;
! R" j+ \# p5 [" q8 G  Z- r    mcasp->regs->RSTAT = 0x0000ffff; 8 K- P2 l4 s, _+ N: g

" g) V3 z8 b9 J+ a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* s* n8 U: b3 \; x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ N6 o! o# Z1 P& ]8 M6 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- {; T4 t- k: B6 E- q! T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ a& ^2 n  L) E4 U/ W1 d( D$ p5 T7 d% b' n
    /* Write a 0, so that no underrun occurs after releasing the state machine */
# p0 Q6 q6 j1 s0 m    mcasp->regs->XBUF5 = 0;+ Y/ \5 F! W) V) v9 ~' P, V- ^
    mcasp->regs->RBUF0 = 0;- e1 z3 j3 K& k0 O

0 {, F% F1 ~$ d% [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 |2 L1 A/ m+ b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' q: b! ?& l5 E6 t+ n* v    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 M8 o3 ?5 r. }* d- g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 h7 q7 i3 x; Q* h' V: s
5 n5 s/ L. n/ S6 C8 \
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- M' M2 b. l4 q$ d+ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, w. U3 L+ \6 ~$ A7 g, b: V    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; w, h# ~) ^$ l/ ~' c9 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; ~! k& B- r# b' O# t+ n- q/ X* s) O% a4 o0 w
    CSR = 0x0000;
. \1 T* f: d# ?9 n    INTC_INTMUX1 = 0x3d;
" a7 x. v7 a7 Q% U5 Q' h0 H2 G3 v$ K    ISTP = (unsigned int)vectors;% {! ^6 b- {/ B4 O1 d
    ICR = 0xFFF0;  . @( c) ~, x1 G7 A  g
    IER |= 0x12;  4 B+ A( Q# g8 b+ c( g& l
    CSR |= 0x01;  
' }" Y' M! m1 k& P2 c- N$ J+ |  \3 v
* O/ v+ H9 \; `. \7 _
+ R+ ?( w7 I9 @# t% C# e/ h9 n! D9 }! M; O# R- z, a
还有就是两个输入输出函数:
8 J/ e1 n5 D5 s" X7 jvoid output_sample(Int32 out_data)/ X; `7 O0 e) U1 Q! F0 g; A
{
! h4 x2 M/ U: e& l$ d: @) _. f  AIC31_data.uint = out_data;  . ]$ n9 T* Z9 {/ e0 H* Y. Y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 m& d' y. U7 |7 T* z! ^( l$ h}  e" I, R/ {, z$ M

" w  C/ ?3 p2 M* OInt32 input_sample(void)* e6 v1 ~4 h3 A8 C1 y% I
{  4 [' w, w" k+ A7 A
  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 s; n7 Y% T& y/ U) {) s) p
  return (AIC31_data.uint);
, Y% A8 m9 E  l% i' G& c* r}& U0 n8 o* `2 R; B9 ]/ X, l3 r
9 u0 |5 R7 ]; Q! [9 j
分享到:  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, 2026-3-5 08:12 , Processed in 0.041551 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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