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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) d, h! k8 k! W7 h/ |9 z$ P: z
main文件:
. ]4 [2 K5 t$ k1 q3 X% Kinterrupt void interrupt4(void)  
7 v- [. ]8 M3 ?7 l4 U7 N4 A# h{9 x9 u0 y+ ]! x4 x
  Uint32 sample;
1 k3 C$ }1 [' S& b6 y  U+ r6 u
0 G( }' Z2 v9 d' G" `7 n0 e* A* M0 ^  sample = input_sample(); // read L + R samples from ADC; Z6 r: l0 W3 G/ K. O) B
  output_sample(sample);   // write L + R samples to DAC , O: J+ c# k& L! l
  return;
  u. S# G* D- C+ ^3 ~9 y# w, X}0 _1 }+ k' N7 |1 T2 N
) J' }% E7 F! h" o3 m5 F
int main( void )
0 l- E/ k" {( ?{
; Z- K0 O" v- _9 }, d
- j% ^# M4 b6 c% D/ e; P+ `( ~: k    /* Initialize BSL */3 g( V3 ^' R/ t$ N' l0 u* U; Y& ^% l
    EVMC6747_init( );9 w' b/ u4 Z. a% E; I7 Z% b/ m
        /* Call evmc6747_intr function */
9 r- S% |/ a+ c6 `2 \% ]! @    aic3106_init( );. x; V; t# Q8 K" ^. v; n
        while(1);
" n( n+ L2 [  m; e}
" F- `) [$ O6 ]8 I* K' R2 \- @, ?# z: O% L$ V4 r5 x

+ U; c. \. C8 Y, E3 l  Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) Z7 j" o. U& |- f8 t# M: A' I0 Y
/* Initialize MCASP1 */
" U; W6 j( I$ y7 |: A; {    mcasp = &MCASP_MODULE_1;
( K8 q7 C/ [2 @    mcasp->regs->GBLCTL  = 0;       // Reset
% }4 p% f) G9 b) ?# Y+ ]$ W9 q    mcasp->regs->RGBLCTL = 0;       // Reset RX, @$ u, K7 J' y. C7 s" J7 ?: v
    mcasp->regs->XGBLCTL = 0;       // Reset TX
) S1 P4 M. e6 E    mcasp->regs->PWRDEMU = 1;       // Free-running
8 g& t. C% w  _. ?+ A   // configure McASP0 receive registers
$ [1 T0 g$ n( a( V: m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ ~/ |( ~# c" [% W- O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ r8 n! u/ ~# Q9 e) w) ~2 B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! k( |+ E! p  h/ l- p, G7 h# G  q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; L1 T! t0 V7 E3 ?, h) \    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 s1 h) B! F5 B  p% c! t1 k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' t( j0 b3 j# e* [+ X+ i8 ~: e5 Y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 m9 L/ {) G% \4 [* Z    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; Q( f+ A: b" j) h6 U/ w: u- S7 ?+ o
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 S, I& ~7 E9 n# F! b! F7 m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" x( n/ q+ {+ f6 Z1 V2 p% [: `
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' ^$ Q. C/ g" J( r    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# N2 T- U' V+ n9 f* B+ W
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: C+ G, d+ C8 }( `) ?    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: E# O) O9 i. d2 J
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: s3 [  [/ r% l
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  j# D  c8 g! @7 q6 O1 Y  }$ Q
/ E0 H. s; O) D+ i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- G3 f' ?1 J3 |; @/ o
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 D) @; `& O9 T. x) U+ I1 k# [
    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 Q" ~5 n3 i: [  a$ T2 l    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 }' W& {& F5 A" s

6 O" U1 ~  q# X& d    mcasp->regs->DITCTL     = 0x00000000; // Not used; o0 U$ ^' r! R# u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: D/ ]7 K. a1 R" D9 T    mcasp->regs->AMUTE      = 0x00000000; // Not used% K) I6 @8 {; R; ~0 h

$ |0 v; F* I4 Q/* Starting sections of the McASP*/
3 @# a! N' Z0 ?; v, A4 [: T6 n$ T    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' D9 n5 d" Y- N' n  N; C5 A- X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 K2 V2 p- |' L" c$ T1 m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . z/ B$ s% y, @0 P8 _% U! E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; e% L( n- ~) X3 j
: Y/ F$ ?1 d# q- m. Y: |+ L    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# b( O! `- A& w' S/ w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" e- s$ F" ]! H: ]    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( K: ^' D5 l  Q2 h9 P% j5 r  ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, j. Q# r/ q$ ^( _' o
2 n. w6 j+ g/ Q  J8 `" L
    mcasp->regs->XSTAT = 0x0000ffff; 7 t* L8 j$ {* ^) c
    mcasp->regs->RSTAT = 0x0000ffff;
' D6 Y7 h. r- j4 [6 v
9 [# `7 b' q! H; J    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* |) d& K9 M0 ?# O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) I2 e) w% m! J$ x! f+ `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : W1 n- o0 s) n7 g& n4 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) B9 M7 f& S, d, m  e1 Z

+ y" w+ ^) I9 }2 N- h    /* Write a 0, so that no underrun occurs after releasing the state machine */
; ^+ b: M8 R( u" k    mcasp->regs->XBUF5 = 0;
& D( R4 [( o5 {& l1 n    mcasp->regs->RBUF0 = 0;
: H5 m8 K- Z% H; V9 b; Z' V! L) E
& @  `6 I4 O4 n7 K6 w4 n* b    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! j$ C' V; u0 s# C3 y: D( S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) p% t; x7 j  s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; U( v2 M! ?- b6 n) Q: X. c. r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 e7 \9 V+ C3 F7 u" ~7 F

5 e, o1 n6 l" E; H- D5 a7 M1 t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: ^8 \! u/ t5 s1 H# m5 h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 E5 Z: `% W: g9 x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
% [# ^. ]! o6 T0 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
" L' h! R+ |% R: ]0 O
  [8 N3 Z& G0 k' W) n' [    CSR = 0x0000;
& p4 U. m/ M- r% R& S4 E% \# N    INTC_INTMUX1 = 0x3d;! Q4 x% z, P6 W9 f8 b* ]
    ISTP = (unsigned int)vectors;0 S9 C" }  `: Q1 y
    ICR = 0xFFF0;  ; f+ n+ M7 d  z$ a
    IER |= 0x12;  " m6 R# Q- l. y- S% Y
    CSR |= 0x01;  
5 H# V# v5 j0 L( K. ]% ~
! g, L6 r& p7 I9 m6 _# f- U& t, v5 y5 ^3 `0 A
$ D) Q9 G, Z0 Q0 i
还有就是两个输入输出函数:3 n6 d/ M1 K+ V0 K
void output_sample(Int32 out_data)
5 q$ z' R7 ?" U& K" J, ]6 t! q{4 `* F# W9 b, y- H( `, q
  AIC31_data.uint = out_data;  
- r& B2 j& F% q' `+ ]5 G  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ T; E! r/ K& L/ y% a) i
}
* s2 \$ K' m- h9 b) ~3 T9 h4 b& }! a7 b
Int32 input_sample(void)7 u  j) f! E' d, q5 B/ t
{  , [2 x. z0 Y. |5 U5 \; x4 \
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ V# S( Z$ O* o, d3 f  return (AIC31_data.uint);* w6 |( q6 j1 g1 }2 _/ [
}
' o4 P8 U) G; N+ y2 Q4 y0 b! b0 }- N/ ~2 F4 H2 h& _
分享到:  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-1-19 00:51 , Processed in 0.040596 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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